Ok, features kicking in
This commit is contained in:
parent
3a33e10038
commit
537a26b4e0
5
.google-cookie
Normal file
5
.google-cookie
Normal file
@ -0,0 +1,5 @@
|
||||
#LWP-Cookies-2.0
|
||||
Set-Cookie3: 1P_JAR="2020-05-13-15"; path="/"; domain=".google.com"; path_spec; domain_dot; secure; expires="2020-06-12 15:07:25Z"; version=0
|
||||
Set-Cookie3: NID="204=n_wUpdR_TRFItRjyHxZ36B0EybjpBvLOa2ZsmpYnFPdVyLkmIaHc86rv9Ne06Ky5XEPRNNnsIHNzfmZc0NVnCf3HujqVbmYxN9OocwqASX0dYmH4B8Iy9UdLmvAUUfKC5FB3EkMMi_Q491lUiFSSbznjktAAMgcuHvJ7MBFAC7w"; path="/"; domain=".google.com"; path_spec; domain_dot; expires="2020-11-12 15:07:25Z"; HttpOnly=None; version=0
|
||||
Set-Cookie3: CGIC=""; path="/complete/search"; domain=".google.com"; path_spec; domain_dot; expires="2020-11-09 15:07:25Z"; HttpOnly=None; version=0
|
||||
Set-Cookie3: CGIC=""; path="/search"; domain=".google.com"; path_spec; domain_dot; expires="2020-11-09 15:07:25Z"; HttpOnly=None; version=0
|
350
main.py
350
main.py
@ -8,174 +8,244 @@ import datetime
|
||||
import googlesearch
|
||||
import emoji
|
||||
|
||||
chat_members = {}
|
||||
base_url = "https://api.telegram.org/bot" + telegram_api + "/"
|
||||
chat_id = ""
|
||||
offset = 0
|
||||
|
||||
start_time = datetime.datetime.now()
|
||||
message_read = 0
|
||||
message_sent = 0
|
||||
class ChatBot():
|
||||
|
||||
def __init__(self, name, api_key, version):
|
||||
"""Inits the Bot with a few conf. vars
|
||||
Args: -> name:str - Name of the bot
|
||||
-> api_key:str - t.me api-key
|
||||
-> version:str - Version number
|
||||
"""
|
||||
|
||||
self.base_url = "https://api.telegram.org/bot" + api_key + "/"
|
||||
self.version = version
|
||||
self.name = name
|
||||
|
||||
# Counters
|
||||
self.start_time = datetime.datetime.now()
|
||||
self.message_read = 0
|
||||
self.message_sent = 0
|
||||
self.log = []
|
||||
|
||||
# Dynamic variables for answering
|
||||
self.chat_id = ""
|
||||
self.offset = 0
|
||||
|
||||
# People in use
|
||||
self.chat_members = {}
|
||||
|
||||
# Available commands
|
||||
self.commands = {
|
||||
"help" : self.bot_show_help,
|
||||
"status" : self.bot_print_status,
|
||||
"log" : self.bot_print_log,
|
||||
"lorem" : self.bot_print_lorem,
|
||||
"weather" : self.bot_show_weather,
|
||||
"google" : self.bot_google_search,
|
||||
"events" : self.bot_print_events,
|
||||
"emojify" : self.bot_emojify,
|
||||
"wikipedia" : self.bot_show_wikipedia,
|
||||
}
|
||||
|
||||
self.message_loop()
|
||||
|
||||
|
||||
def bot_print_lorem(params):
|
||||
send_message("Lorem ipsum dolor sit amet....")
|
||||
|
||||
def bot_print_status(params):
|
||||
delta = str(datetime.datetime.now() - start_time)
|
||||
message = "<pre>Status: Running \nUptime: " + delta + "\nMessages read: " + str(message_read) + "\nMessages sent: " + str(message_sent) + "</pre>"
|
||||
send_message(message)
|
||||
|
||||
def bot_show_weather(params):
|
||||
if len(params) != 1:
|
||||
send_message("Invalid Syntax, please give one parameter, the location")
|
||||
return
|
||||
send_message("Probably sunny I guess? Yes yes I'm still learning")
|
||||
|
||||
def bot_google_search(params):
|
||||
if len(params) < 1:
|
||||
send_message("Please tell me what to look for")
|
||||
return
|
||||
param_string = ""
|
||||
for word in params:
|
||||
param_string += word + "+"
|
||||
param_string = param_string[:-1]
|
||||
search_url = "https://google.com/search?q=" + param_string
|
||||
try:
|
||||
res = googlesearch.search(param_string.replace("+"," ") ,num=5,start=0,stop=5)
|
||||
send_string = "Google search for <b>" + param_string.replace("+"," ") + "</b>:\n"
|
||||
for url in res:
|
||||
print(url)
|
||||
send_string += url + "\n\n"
|
||||
send_string += "Search url:\n" + search_url
|
||||
except:
|
||||
send_string = "Search url:\n" + search_url
|
||||
send_message(send_string)
|
||||
def message_loop(self):
|
||||
""""""
|
||||
while(True):
|
||||
result = self.fetch_updates()
|
||||
if len(result) == 0:
|
||||
time.sleep(5)
|
||||
else:
|
||||
self.handle_result(result)
|
||||
time.sleep(5)
|
||||
|
||||
|
||||
def bot_print_events(params):
|
||||
events = {
|
||||
"anniversary" : datetime.date(datetime.datetime.now().year,12,7),
|
||||
"valentine's day": datetime.date(datetime.datetime.now().year,2,14),
|
||||
"Marine's birthday": datetime.date(datetime.datetime.now().year,8,31),
|
||||
"Remy's birthday": datetime.date(datetime.datetime.now().year,3,25),
|
||||
}
|
||||
send_string = "Upcoming events: \n"
|
||||
for key in events:
|
||||
delta = events[key] - datetime.date.today()
|
||||
if delta < datetime.timedelta(0):
|
||||
delta += datetime.timedelta(days = 365)
|
||||
send_string += key + ": " + str(delta.days) + " days \n"
|
||||
|
||||
send_message(send_string)
|
||||
def fetch_updates(self):
|
||||
""""""
|
||||
update_url = self.base_url + "getUpdates"
|
||||
data = {"offset":self.offset}
|
||||
result = requests.post(update_url,data=data)
|
||||
try:
|
||||
result = result.json()["result"]
|
||||
except:
|
||||
result = ""
|
||||
return result
|
||||
|
||||
|
||||
def bot_emojify(params):
|
||||
def handle_result(self, result):
|
||||
"""Inspects the message and reacts accordingly. Can easily be extended"""
|
||||
for message_data in result:
|
||||
self.message_read += 1
|
||||
self.offset = message_data["update_id"] + 1
|
||||
message = message_data["message"]
|
||||
self.chat_id = message["chat"]["id"]
|
||||
author = message["from"]
|
||||
|
||||
if len(params) < 2:
|
||||
send_message(emoji.emojize("Please send a separator as the first argument, and the text afterwards.\nExample:\n/emojify :heart: Example text"))
|
||||
sep = params[0]
|
||||
emoji_dict = {"a" : ":regional_indicator_symbol_letter_a:","b" : ":regional_indicator_symbol_letter_b:","c" : ":regional_indicator_symbol_letter_c:","d" : ":regional_indicator_symbol_letter_d:","e" : ":regional_indicator_symbol_letter_e:","f" : ":regional_indicator_symbol_letter_f:","g" : ":regional_indicator_symbol_letter_g:","h" : ":regional_indicator_symbol_letter_h:","i" : ":regional_indicator_symbol_letter_i:","j" : ":regional_indicator_symbol_letter_j:","k" : ":regional_indicator_symbol_letter_k:","l" : ":regional_indicator_symbol_letter_l:","m" : ":regional_indicator_symbol_letter_m:","n" : ":regional_indicator_symbol_letter_n:","o" : ":regional_indicator_symbol_letter_o:","p" : ":regional_indicator_symbol_letter_p:","q" : ":regional_indicator_symbol_letter_q:","r" : ":regional_indicator_symbol_letter_r:","s" : ":regional_indicator_symbol_letter_s:","t" : ":regional_indicator_symbol_letter_t:","u" : ":regional_indicator_symbol_letter_u:","v" : ":regional_indicator_symbol_letter_v:","w" : ":regional_indicator_symbol_letter_w:","x" : ":regional_indicator_symbol_letter_x:","y" : ":regional_indicator_symbol_letter_y:","z" : ":regional_indicator_symbol_letter_z:"," " : sep}
|
||||
if author["id"] not in self.chat_members:
|
||||
self.chat_members[author["id"]] = author["first_name"] + " " + author["last_name"]
|
||||
self.send_message("Welcome to this chat " + self.chat_members[author["id"]] + " !")
|
||||
|
||||
prep_string = ""
|
||||
for i in params[1:]:
|
||||
prep_string += i.lower() + " "
|
||||
out_string = ""
|
||||
for i in prep_string[:-1]:
|
||||
if i in emoji_dict:
|
||||
out_string += emoji_dict[i] + " "
|
||||
if "text" in message:
|
||||
print("Chat said: ", emoji.demojize(message["text"]))
|
||||
|
||||
if "entities" in message:
|
||||
for entry in message["entities"]:
|
||||
if entry["type"] == "bot_command":
|
||||
self.handle_command(message["text"][1:])
|
||||
|
||||
elif "photo" in message:
|
||||
print("Photo received, what do I do?")
|
||||
|
||||
|
||||
def handle_command(self, command):
|
||||
"""Handles commands and stuff, using a bash-like syntax:
|
||||
/[command] [argument 1] [argument 2] ...
|
||||
"""
|
||||
full = command.split(" ")
|
||||
if full[0] in self.commands:
|
||||
self.commands[full[0]](full[1:])
|
||||
else:
|
||||
out_string += i
|
||||
send_message(emoji.emojize(out_string))
|
||||
self.send_message("Command <code>" + full[0] + "</code> not found. Please try again.")
|
||||
|
||||
|
||||
def send_message(self, message):
|
||||
print("SENDING: " + emoji.demojize(message))
|
||||
|
||||
data = {'chat_id': self.chat_id, 'text': message, "parse_mode": "HTML"}
|
||||
send_url = self.base_url + "sendMessage"
|
||||
try:
|
||||
r = requests.post(send_url, data=data)
|
||||
except:
|
||||
self.log.append(str(datetime.datetime.now()) + " - did not send:\n" + message)
|
||||
self.message_sent += 1
|
||||
|
||||
############################################################################
|
||||
"""Command-implementation"""
|
||||
|
||||
def bot_print_lorem(self, params):
|
||||
"""Prints a placeholder text"""
|
||||
self.send_message("Lorem ipsum dolor sit amet....")
|
||||
|
||||
|
||||
commands = {
|
||||
"status" : bot_print_status,
|
||||
"lorem" : bot_print_lorem,
|
||||
"weather" : bot_show_weather,
|
||||
"google" : bot_google_search,
|
||||
"events" : bot_print_events,
|
||||
"emojify" : bot_emojify,
|
||||
}
|
||||
def bot_print_status(self, params):
|
||||
"""Prints the bots current status and relevant information"""
|
||||
delta = str(datetime.datetime.now() - self.start_time)
|
||||
message = "<pre>Status: Running \n"
|
||||
message += "Uptime: " + delta + "\n"
|
||||
message += "Messages read: " + str(self.message_read) + "\n"
|
||||
message += "Messages sent: " + str(self.message_sent) + "</pre>"
|
||||
self.send_message(message)
|
||||
|
||||
|
||||
def bot_show_weather(self, params):
|
||||
"""Shows a weather-forecast for a given location"""
|
||||
if len(params) != 1:
|
||||
self.send_message("Invalid Syntax, please give one parameter, the location")
|
||||
return
|
||||
self.send_message("Probably sunny I guess? Yes yes I'm still learning")
|
||||
|
||||
|
||||
def bot_google_search(self, params):
|
||||
"""Does a google search and shows relevant links"""
|
||||
if len(params) < 1:
|
||||
self.send_message("Please tell me what to look for")
|
||||
return
|
||||
|
||||
param_string = ""
|
||||
for word in params:
|
||||
param_string += word + "+"
|
||||
param_string = param_string[:-1]
|
||||
search_url = "https://google.com/search?q=" + param_string
|
||||
|
||||
try:
|
||||
res = googlesearch.search(param_string.replace("+"," ") ,num=5,start=0,stop=5)
|
||||
send_string = "Google search for <b>" + param_string.replace("+"," ") + "</b>:\n"
|
||||
for url in res:
|
||||
send_string += url + "\n\n"
|
||||
send_string += "Search url:\n" + search_url
|
||||
except:
|
||||
send_string = "Search url:\n" + search_url
|
||||
self.send_message(send_string)
|
||||
|
||||
|
||||
def bot_print_events(self, params):
|
||||
"""Shows a list of couple-related events and a countdown"""
|
||||
events = {
|
||||
"anniversary" : datetime.date(datetime.datetime.now().year,12,7),
|
||||
"valentine's day": datetime.date(datetime.datetime.now().year,2,14),
|
||||
"Marine's birthday": datetime.date(datetime.datetime.now().year,8,31),
|
||||
"Remy's birthday": datetime.date(datetime.datetime.now().year,3,25),
|
||||
}
|
||||
send_string = "Upcoming events: \n"
|
||||
for key in events:
|
||||
delta = events[key] - datetime.date.today()
|
||||
if delta < datetime.timedelta(0):
|
||||
delta += datetime.timedelta(days = 365)
|
||||
send_string += key + ": " + str(delta.days) + " days \n"
|
||||
|
||||
self.send_message(send_string)
|
||||
|
||||
|
||||
def fetch_updates():
|
||||
update_url = base_url + "getUpdates"
|
||||
data = {"offset":offset}
|
||||
result = requests.post(update_url,data=data)
|
||||
try:
|
||||
result = result.json()["result"]
|
||||
except:
|
||||
result = ""
|
||||
return result
|
||||
def bot_emojify(self, params):
|
||||
"""Converts a string to emojis"""
|
||||
|
||||
def send_message(message):
|
||||
print("SENDING: " + emoji.demojize(message))
|
||||
global message_sent
|
||||
data = {'chat_id': chat_id, 'text': message, "parse_mode": "HTML"}
|
||||
send_url = base_url + "sendMessage"
|
||||
r = requests.post(send_url, data=data)
|
||||
message_sent += 1
|
||||
if len(params) < 2:
|
||||
self.send_message(emoji.emojize("Please send a separator as the first argument, and the text afterwards.\nExample:\n/emojify :heart: Example text"))
|
||||
sep = params[0]
|
||||
emoji_dict = {"a" : ":regional_indicator_symbol_letter_a:","b" : ":regional_indicator_symbol_letter_b:","c" : ":regional_indicator_symbol_letter_c:","d" : ":regional_indicator_symbol_letter_d:","e" : ":regional_indicator_symbol_letter_e:","f" : ":regional_indicator_symbol_letter_f:","g" : ":regional_indicator_symbol_letter_g:","h" : ":regional_indicator_symbol_letter_h:","i" : ":regional_indicator_symbol_letter_i:","j" : ":regional_indicator_symbol_letter_j:","k" : ":regional_indicator_symbol_letter_k:","l" : ":regional_indicator_symbol_letter_l:","m" : ":regional_indicator_symbol_letter_m:","n" : ":regional_indicator_symbol_letter_n:","o" : ":regional_indicator_symbol_letter_o:","p" : ":regional_indicator_symbol_letter_p:","q" : ":regional_indicator_symbol_letter_q:","r" : ":regional_indicator_symbol_letter_r:","s" : ":regional_indicator_symbol_letter_s:","t" : ":regional_indicator_symbol_letter_t:","u" : ":regional_indicator_symbol_letter_u:","v" : ":regional_indicator_symbol_letter_v:","w" : ":regional_indicator_symbol_letter_w:","x" : ":regional_indicator_symbol_letter_x:","y" : ":regional_indicator_symbol_letter_y:","z" : ":regional_indicator_symbol_letter_z:"," " : sep}
|
||||
|
||||
def handle_command(command):
|
||||
"""Handles commands and stuff, using a bash-like syntax:
|
||||
/[command] [argument 1] [argument 2] ...
|
||||
"""
|
||||
full = command.split(" ")
|
||||
if full[0] in commands:
|
||||
commands[full[0]](full[1:])
|
||||
else:
|
||||
send_message("Command <code>" + full[0] + "</code> not found. Please try again.")
|
||||
prep_string = ""
|
||||
for i in params[1:]:
|
||||
prep_string += i.lower() + " "
|
||||
out_string = ""
|
||||
for i in prep_string[:-1]:
|
||||
if i in emoji_dict:
|
||||
out_string += emoji_dict[i] + " "
|
||||
else:
|
||||
out_string += i
|
||||
self.send_message(emoji.emojize(out_string))
|
||||
|
||||
|
||||
def handle_result(result):
|
||||
"""Inspects the message and reacts accordingly. Can easily be extended"""
|
||||
print("handling")
|
||||
for message_data in result:
|
||||
global chat_id
|
||||
global offset
|
||||
global message_read
|
||||
message_read += 1
|
||||
offset = message_data["update_id"] + 1
|
||||
message = message_data["message"]
|
||||
chat_id = message["chat"]["id"]
|
||||
author = message["from"]
|
||||
def bot_show_help(self, params):
|
||||
"""Shows a list of all commands and their description"""
|
||||
send_text = "Hello, this is " + self.name + ", V." + self.version + "\n"
|
||||
send_text += "Here is a list of the available commands:\n"
|
||||
for entry in self.commands:
|
||||
send_text += "<code>" + entry + "</code> - "
|
||||
send_text += self.commands[entry].__doc__ + "\n\n"
|
||||
self.send_message(send_text)
|
||||
|
||||
if author["id"] not in chat_members:
|
||||
chat_members[author["id"]] = author["first_name"] + " " + author["last_name"]
|
||||
send_message("Welcome to this chat " + chat_members[author["id"]] + " !")
|
||||
def bot_print_log(self, params):
|
||||
"""Shows an error-log, mostly of bad api-requests"""
|
||||
send_text = ""
|
||||
for event in self.log:
|
||||
send_text += event + "\n"
|
||||
if send_text == "":
|
||||
send_text += "No errors up to now"
|
||||
self.send_message(send_text)
|
||||
|
||||
if "text" in message:
|
||||
print("Chat said: ", emoji.demojize(message["text"]))
|
||||
def bot_show_wikipedia(self,params):
|
||||
"""Shows the wikipedia entry for a given therm"""
|
||||
if len(params) > 2 or len(params) == 0:
|
||||
self.send_message("Please only search for one word at a time. 1rst param is for language (de or fr or en or ...)")
|
||||
return
|
||||
|
||||
if "entities" in message:
|
||||
for entry in message["entities"]:
|
||||
if entry["type"] == "bot_command":
|
||||
handle_command(message["text"][1:])
|
||||
|
||||
elif "photo" in message:
|
||||
print("Photo received, what do I do?")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def message_loop():
|
||||
while(True):
|
||||
result = fetch_updates()
|
||||
if len(result) == 0:
|
||||
print("Nada")
|
||||
time.sleep(5)
|
||||
if len(params) == 2:
|
||||
url = "https://" + params[0] + ".wikipedia.org/wiki/" + params[1]
|
||||
else:
|
||||
handle_result(result)
|
||||
time.sleep(5)
|
||||
url = "https://en.wikipedia.org/wiki/" + params[0]
|
||||
|
||||
message_loop()
|
||||
try:
|
||||
r = requests.get(url)
|
||||
except:
|
||||
url = "https://en.wikipedia.org/wiki/" + params[0]
|
||||
r = requests.get(url)
|
||||
if r.status_code == 404:
|
||||
self.send_message("No result found for query")
|
||||
return
|
||||
self.send_message(url)
|
||||
|
||||
|
||||
bot = ChatBot("ChatterBot", telegram_api, version="1.0")
|
||||
|
Loading…
x
Reference in New Issue
Block a user