class RelAgeBot(telepot.Bot): def __init__(self, token, host, dbname, user, password): super().__init__(token) self.bot = telepot.Bot(token) self.database = DatabaseConnection(host, dbname, user, password) self.bot.notifyOnMessage(self.handle) self.birthdays = {} self.count = 0 self.timer = time.time() self.token = token self.host = host self.dbname = dbname self.user = user self.password = password def birth(self, chat_id, msg): tokens = msg["text"].split() if len(tokens) > 1: full_name = msg["text"].replace("/birth ", "") unidecode_name = unidecode.unidecode(full_name).lower().replace(' ', '') result = self.database.execute_query(QueryBuilder.add_query(chat_id, unidecode_name, 0, 0, False)) if result == "23505": self.bot.sendMessage(chat_id, full_name + " already exists in some sort of way or shape") elif result == "25P02": self.bot.sendMessage(chat_id, "Something went terribly wrong, please contact your shizadmin") else: self.bot.sendMessage(chat_id, full_name + " is born") else: self.bot.sendMessage(chat_id, "usage: /birth <name of person>") def age(self, chat_id, msg): tokens = msg["text"].split() if len(tokens) > 1: full_name = msg["text"].replace("/age ", "") unidecode_name = unidecode.unidecode(full_name).lower().replace(' ', '') result_query = self.database.execute_query(QueryBuilder.get_query(chat_id, unidecode_name)) if len(result_query) == 1: age = result_query[0][2] self.bot.sendMessage(chat_id, full_name + " is " + str(age) + " years old") elif len(result_query) > 1: message = full_name + " is ambigious\n you could have meant:" for row in result_query: message += "\t" + row[2] + "\n" self.bot.sendMessage(chat_id, message) else: self.bot.sendMessage(chat_id, full_name + " does not exist yet \nUse /birth for " + full_name + " to exists") else: self.bot.sendMessage(chat_id, "usage /age <name of person>") def kill(self, chat_id, msg): tokens = msg["text"].split() if len(tokens) > 1: full_name = msg["text"].replace("/kill ", "") unidecode_name = unidecode.unidecode(full_name).lower().replace(' ', '') result_query = self.database.execute_query(QueryBuilder.remove_query(chat_id, unidecode_name)) if len(result_query) == 1: age = result_query[0][2] self.bot.sendMessage(chat_id, full_name + " was " + str(age) + " years old when last seen") elif len(result_query) > 1: message = full_name + " is ambigious\n you could have meant:" for row in result_query: message += "\t" + row[2] + "\n" self.bot.sendMessage(chat_id, message) else: self.bot.sendMessage(chat_id, full_name + " does not exist yet \nUse /birth for " + full_name + " to exists") else: self.bot.sendMessage(chat_id, "usage: /kill <name of person>") def birthday(self, chat_id, msg): tokens = msg["text"].split() if len(tokens) > 1: full_name = msg["text"].replace("/birthday ", "") unidecode_name = unidecode.unidecode(full_name).lower().replace(' ', '') result_query = self.database.execute_query(QueryBuilder.get_query(chat_id, unidecode_name)) if len(result_query) == 1: if time.time() - result_query[0][3] < 60 and result_query[0][3] is not 0: if not result_query[0][4]: self.bot.sendMessage(chat_id, "You already asked, try again in one minute") self.database.execute_query(QueryBuilder.update_already_asked(chat_id, unidecode_name, True)) return elif len(result_query) > 1: message = full_name + " is ambigious\n you could have meant:" for row in result_query: message += "\t" + row[2] + "\n" self.bot.sendMessage(chat_id, message) return else: self.bot.sendMessage(chat_id, full_name + " does not exist yet \nUse /birth for " + full_name + " to exist") return self.database.execute_query(QueryBuilder.update_already_asked(chat_id, unidecode_name, False)) self.database.execute_query(QueryBuilder.update_last_modified(chat_id, unidecode_name, int(time.time()))) result_query = self.database.execute_query(QueryBuilder.update_age(chat_id, unidecode_name, 1)) if len(result_query) == 1: age = result_query[0][2] birthday_msg = "Whoooohoooooo! Happy birthday! " + full_name + " is now " + str(age) + " years old" self.bot.sendMessage(chat_id, birthday_msg) elif len(result_query) > 1: message = full_name + " is ambigious\n you could have meant:" for row in result_query: message += "\t" + row[2] + "\n" self.bot.sendMessage(chat_id, message) else: self.bot.sendMessage(chat_id, full_name + " does not exist yet \nUse /birth for " + full_name + " to exist") else: self.bot.sendMessage(chat_id, "usage /birthday <name of person>") def check_connection(self): try: self.database.database.isolation_level except OperationalError: print("Database connection reestablished at {} time", str(time.time())) configs = get_configurations("./config.ini", "Default Settings") host = (configs["host"], "host") dbname = (configs["dbname"], "dbname") username = (configs["username"], "username") password = (configs["password"], "password") self.database = DatabaseConnection(host[0], dbname[0], username[0], password[0]) def handle(self, msg): chat_id = msg['chat']['id'] command = msg['text'] print(msg) if time.time() - self.timer > 0.9: self.timer = time.time() self.count = 0 elif self.count < 39: self.count += 1 else: self.bot.sendMessage(chat_id, "You killed me with message ID: " + msg["message_id"]) exit() self.check_connection() if '/birthday' in command: self.birthday(chat_id, msg) elif '/birth' in command: self.birth(chat_id, msg) elif '/kill' in command: self.kill(chat_id, msg) elif '/age' in command: self.age(chat_id, msg)