def make_reply(self, msg, username, first_name): reply = None if msg is not None: if msg == "ping": Log.a("pong") reply = "pong" return reply if msg == "info": Log.a("info") reply = "Shamiko-Project, version 0.0.5.1" return reply if "give" and "cookie" in msg: Log.a("cookie") reply = "Of course!" return reply if msg == "hello there": Log.a("Hello there") reply = "Hello @" + username + ". I am Yuko ( ^ ω ^)" return reply if msg == "hello": Log.a("hello") reply = "Hi " + first_name + " ^^" return reply
def status(bot, update): try: g_name = update["message"]["chat"]["title"] by = update["message"]["from"]["username"] byid = update["message"]["from"]["id"] gid = update["message"]["chat"]["id"] if update["message"]["new_chat_members"]: join_user_name = update["message"]["new_chat_members"][0]['first_name'] if "username" in update["message"]["new_chat_members"][0]: join_user_username = update["message"]["new_chat_members"][0]['username'] else: join_user_username = join_user_name join_user_id = update["message"]["new_chat_members"][0]['id'] if join_user_id == bot["id"]: text = "Aggiunta a: %s\nUtente: @%s" % (g_name, by) bpht = None # ToDo Get Propic Method if bpht: HTTPLL.sendPhoto(Manager.get_main_bot_token(), Manager.get_owner_id(), bpht, caption=text) else: HTTPLL.sendMessage(Manager.get_main_bot_token(), Manager.get_owner_id(), text) elif update["message"]["left_chat_member"]: left_user_name = update["message"]["left_chat_member"]['first_name'] left_user_id = update["message"]["left_chat_member"]['id'] if left_user_id == bot["id"]: HTTPLL.sendMessage(Manager.get_main_bot_token(), Manager.get_owner_id(), text="Rimossa da: %s\nUtente @%s" % (g_name, by)) Log.a("[%s] Rimossa da un gruppo da %s" % (bot["first_name"], by)) except Exception as err: Log.e(err) pprint.pprint(update)
def reply_to_usermessage(self, msg, sendname, takename): if msg is not None: if "yuko pat her" in msg: Log.a("pat her") reply = "Hai! *smiles and jumps on " + takename + "'s arms*" return reply
def default_list(infos): say = infos.reply try: text = "Le sezioni default al momento sono:\n\n" text += "complimenti\nbene\ninsulti\ngiorno\nscuse\nringraziamenti\nnotte\nsaluti\namare\n" text += "\nVedendo il contenuto di essi puoi facilmente kitsucapire a cosa servono ~" say(text) Log.a("[Bot: @%s | %s] user: %s ID: %s 'list_risposte riuscito'" % (infos.username, infos.bid, infos.user.username, infos.user.uid)) except Exception as err: say(Utils.get_phrase("error")) Log.e(err)
def warn_token(key): ids = Manager.get_bot_from_token(key) pid = ids["user_id"] bid = ids["bot_id"] try: HTTPLL.sendMessage( Manager.get_main_bot_token(), pid, "Il tuo bot è stato scollegato per token revokata o invalida," " registra la sua nuova token per tornare ad utilizzarlo!") except Exception: pass if Manager.delete_bot(bid): Log.a("Master, ho scollegato il bot di %s per token revocata." % pid)
def status(bot, update): try: g_name = update["message"]["chat"]["title"] gid = update["message"]["chat"]["id"] if "username" in update["message"]["from"]: by = update["message"]["from"]["username"] else: by = "[no username]" byid = update["message"]["from"]["id"] # gid = update["message"]["chat"]["id"] propid = Manager.get_prop_id(bot["token"]) if update["message"]["new_chat_members"]: join_user_name = update["message"]["new_chat_members"][0]['first_name'] # join_user_username = update["message"]["new_chat_members"][0]['username'] join_user_id = update["message"]["new_chat_members"][0]['id'] if join_user_id == bot["id"]: text = "Aggiunta a: %s\nUtente: @%s" % (g_name, by) bpht = HTTPLL.getChatPhoto(bot["token"], gid) if bpht: HTTPLL.sendPhoto(bot["token"], propid, bpht, caption=text) else: HTTPLL.sendMessage(bot["token"], propid, text) Log.a("[Bot: %s | @%s] Aggiunto a %s da %s" % (bot["username"], bot["id"], g_name, byid)) Dialoger.send(Infos(bot, update), "newgroup", special_token=bot["token"]) else: state = DBs.read_obj(gid, bot["id"], "groups")["ext"] if not state or state == "0": Dialoger.send(Infos(bot, update), "welcome", special_name=join_user_name, special_token=bot["token"]) elif update["message"]["left_chat_member"]: left_user_id = update["message"]["left_chat_member"]['id'] if left_user_id == bot["id"]: Log.i("bot quitt") Unreloaded.gbots[str(update["message"]["chat"]["id"])].remove(bot["id"]) HTTPLL.sendMessage(bot["token"], propid, "Rimossa da: %s\nUtente @%s" % (g_name, by)) Log.a("[%s] Rimosso da un gruppo da %s" % (bot["first_name"], by)) except Exception as err: Log.e(err)
def list_risps(infos): say = infos.reply try: if infos.user.lang_n != 0: dialogs = "dialogs_eng.json" else: dialogs = "dialogs.json" lang_itm = "IT" if infos.user.lang_n == 0 else "EN" if infos.text == "": say("Devi specificare il trigger da cui eliminare le risposte.") return trigger = infos.text.lower() dials = json.loads( open("Files/bot_files/%s/%s" % (infos.bid, dialogs)).read()) if trigger not in dials: say("Non ho trovato questa sezione.. kitsu...") return if not dials[trigger]: say("Non ci sono gia' frasi in questa sezione kitsu!") return msg = "Ecco le frasi (%s) per `%s`:\n\n" % (lang_itm, trigger) frasi = dials[trigger] x = 1 for frase in frasi: msg += "`%s`) `%s`\n\n" % (x, frase) x += 1 msg += "\nTotale di %s frasi!" % len(frasi) say(msg, markdown=True) Log.a("%s <- %s -> [list_risposte]" % (infos.bid, infos.user.uid)) except Exception as err: say("S-si è verificato un errore...") Log.e(err)
def list_risps_form(infos): say = infos.reply try: if infos.user.lang_n != 0: dialogs = "dialogs_eng.json" else: dialogs = "dialogs.json" if infos.text == "": say("Devi specificare il trigger per cui listare le risposte.") return trigger = infos.text.lower() dials = json.loads( open("Files/bot_files/%s/%s" % (infos.bid, dialogs)).read()) if trigger not in dials: say("Non ho trovato questa sezione.. kitsu...") return if not dials[trigger]: say("Non ci sono gia' frasi in questa sezione kitsu!") return com = "Ecco a te:\n`%s" % trigger for frase in dials[trigger]: com += " | %s" % frase com += "`" say(com, markdown=True) Log.a("%s <- %s -> [list_risposte_form]" % (infos.bid, infos.user.uid)) except Exception as err: say("S-si è verificato un errore...") Log.e(err)
def add_interazione(infos): say = infos.reply try: if infos.user.lang_n != 0: dialogs = "dialogs_eng.json" else: dialogs = "dialogs.json" lang_itm = "IT" if infos.user.lang_n == 0 else "EN" user = infos.user.username uid = infos.user.uid if infos.text == "": say("Devi specificare il nome della sezione da creare.") return Log.a("[Bot: @%s | %s] user: %s ID: %s 'senza trigger'" % (infos.username, infos.user.uid, user, uid)) trigger = infos.text.lower() dials = json.loads( open("Files/bot_files/%s/%s" % (infos.bid, dialogs)).read()) if trigger in dials: return say("Questa sezione e' gia' presente ~") else: dials[trigger] = [] with open("Files/bot_files/%s/%s" % (infos.bid, dialogs), "w") as file_d: file_d.write(json.dumps(dials)) say("Sezione aggiunta! (%s)\nAggiungici cio' che vuoi ~" % lang_itm) Log.a("[Bot: @%s | %s] user: %s ID: %s 'add_frase riuscito'" % (infos.username, infos.user.uid, user, uid)) except Exception as err: Log.e(err) say("S-si è verificato un errore...")
except: new_chat_member_ = None try: gone_chat_member_ = item["message"]["left_chat_member"] except: gone_chat_member_ = None Log.i(from_) Log.i(chat_) if new_chat_member_ is not None: new_chat_member_name_ = item["message"][ "new_chat_participant"]["username"] Log.a("welcome") reply = "Welcome @" + new_chat_member_name_ + " to " + chat_name_ + " ^^" bot.send_message(reply, chat_) if gone_chat_member_ is not None: gone_chat_member_name_ = item["message"]["left_chat_member"][ "first_name"] Log.a("Left") reply = "Goodby " + gone_chat_member_name_ + " ;__;" bot.send_message(reply, chat_) try: reply_to_message_ = item["message"]["reply_to_message"] except: reply_to_message_ = None
def send(infos, sezione, antispam=True, to_id=None, special_name=None, special_group_name=None, special_user_name=None, no_log=False, special_token=None, special_bid=None, special_text=None, ignore_specials=False, recorsivity=None, add=None, parse="markdown"): text = "<vuoto>" try: quote = False inter_bot_id = None sezione_inter = None quitta = False no_prew = False if sezione: infos.trigger = sezione else: infos.trigger = "" if recorsivity: if recorsivity > 3: return else: recorsivity += 1 else: recorsivity = 1 if not to_id: to_id = infos.cid if special_group_name: infos.name = special_group_name if special_user_name: infos.user.name = special_user_name if special_token: infos.token = special_token if special_bid: infos.bid = special_bid if not special_text: text = Dialogs.get_text(infos, sezione) if add: try: text += add except Exception: pass if not text: return False if text.lower() == "skip" or text.lower() == "+skip+": return True if antispam: if Unreloaded.antispam(infos): return True else: text = special_text text = Dialogs.section_replacer(infos, text) if infos.api: return text if "[warn]" in text: return BotsFoos.warn(infos) if "[unwarn]" in text: return BotsFoos.unwarn(infos) if "+exe+" in text: infos.master_message("Master, +exe+ is deprecated:\n`" + text + "`\nIn `" + sezione + "`", parse_mode="markdown") Log.a("[%s] U: %s %s" % (infos.bot_name, infos.user.username, sezione)) return if not ignore_specials: text = Utils.replacer(infos, text) text = Actions.action(infos, text, sezione) if not text: return if type(text) is bool: return if "[noprew]" in text: text = text.replace("[noprew]", "") no_prew = True if "[quote]" in text: text = text.replace("[quote]", "") quote = infos.user.message.id if "[quote2]" in text: text = text.replace("[quote2]", "") if infos.to_user: quote = infos.to_user.message.id if "[quit]" in text: text = text.replace("[quit]", "") quitta = True match = re.search("\[(\d+)\]", text) if match: if int(match.group(1)) not in Manager.get_bots_id(): return HTTPLL.sendMessage( infos.token, Manager.get_prop_id(infos.token), "%s non è un ID valido." % match.group(1)) result = text.split("[" + match.group(1) + "]") trigs = json.loads( open("Files/bot_files/%s/%s" % (match.group(1), "triggers.json")).read()) if "autorizzati" not in trigs: HTTPLL.sendMessage( infos.token, infos.prop_id, "%s non ti ha autorizzato." % match.group(1)) elif infos.bid not in trigs["autorizzati"]: HTTPLL.sendMessage( infos.token, infos.prop_id, "%s non ti ha autorizzato." % match.group(1)) # infos.reply("Autorizzati: %s" % ) else: inter_bot_id = int(match.group(1)) sezione_inter = result[1] text = result[0] if special_name: text = text.replace("+newuser+", special_name) if not text: return text, kb = Utils.get_keyboard(text) if text == "": return try: caption = None if "+stk+" in text: stk = text.split("()")[1] HTTPLL.sendSticker(infos.token, chat_id=to_id, sticker=stk) return True if "+pht+" in text: elems = text.split("()") pht = elems[1] if len(elems) == 3: caption = elems[2] HTTPLL.sendChatAction(infos.token, to_id, 'upload_photo') time.sleep(0.3) HTTPLL.sendPhoto(infos.token, chat_id=to_id, photo=pht, caption=caption, reply_to_message_id=quote) return True if "+doc+" in text: elems = text.split("()") doc = elems[1] if len(elems) == 3: caption = elems[2] HTTPLL.sendDocument(infos.token, to_id, doc, caption=caption, reply_to_message_id=quote) return True if "+aud+" in text or "+voi+" in text: aud = text.split("()")[1] HTTPLL.sendVoice(infos.token, to_id, aud, reply_to_message_id=quote) return True if "+vid+" in text: elems = text.split("()") vid = elems[1] if len(elems) == 3: caption = elems[2] HTTPLL.sendVideo(infos.token, to_id, vid, caption=caption, reply_to_message_id=quote) return True except Exception as err: Log.w("Errore nell'invio del media: %s" % err) return False text = Utils.escape_markdown(text) text = text.replace("<b>", "*").replace("</b>", "*") text = text.replace("<c>", "`").replace("</c>", "`") text = text.replace("<i>", "_").replace("</i>", "_") text = Utils.link_elab(text, infos) text = re.sub("\/\w+\\_\w+", "$&", text).replace("\\\\_", "\\_") match = re.search("\B<q>.+</q>\B", text) if match: iquote = "[%s](tg://user?id=%s)" % (str(match.group(0)).replace( "<q>", "").replace("</q>", ""), infos.user.uid) text = re.sub("\B<q>.+</q>\B", iquote, text) result = re.finditer(re.compile(r"\*.+?\*"), text) if result: for res in result: text = text.replace(res.group(), res.group(0).replace("\_", "_")) HTTPLL.sendChatAction(infos.token, to_id, 'typing') HTTPLL.sendMessage(infos.token, chat_id=to_id, text=text, parse_mode=parse, disable_web_page_preview=no_prew, reply_to_message_id=quote, reply_markup=kb) if not no_log: Log.a("%s <- %s -> [%s]" % (infos.bid, infos.user.uid, sezione)) if infos.chat_private: return if quitta: HTTPLL.leaveChat(infos.token, infos.cid) if inter_bot_id and sezione_inter: try: send(infos, sezione_inter, special_token=Manager.get_token_from_bot_id(inter_bot_id), antispam=False, special_bid=inter_bot_id, recorsivity=recorsivity) except Exception: pass return True except Error.Unauthorized: if not to_id: Log.e("Qualcosa non va, l'ID era None...") return "ERR" DBs.remove_id(infos.entity, to_id) return "ERR" except Error.BadRequest as err: if "chat not found" in str(err): return if "group chat was migrated" in str(err): DBs.remove_id(infos.entity, to_id) return "ERR" Log.e("Bot %s -> BadRequest (%s)" % (infos.bot_name, err)) if infos.user.is_owner: infos.reply( "Master non sono riuscita ad inviare questo messaggio:\n" "`%s`\nSegnalalo a @Kaikyu o controlla la formattazione." % text, markdown=True) return "ERR" except Error.NotEnoughtRights: DBs.remove_id(infos.entity, to_id) return "ERR" except Exception as err: msg = "Ho trovato un errore: riga {} {} {}".format( sys.exc_info()[-1].tb_lineno, type(err).__name__, err) HTTPLL.sendMessage(infos.token, infos.prop_id, msg) Log.e(msg) if "can't parse" in str(err).lower(): # noinspection PyTypeChecker send(infos, "", to_id=Manager.get_prop_id(infos.token), special_text= "C'è un problema con la formattazione del messaggio:\n\n%s" % text, parse=None, antispam=False) return "ERR"
def del_default(infos): say = infos.reply try: user = infos.user.username uid = infos.user.uid if infos.user.lang_n != 0: triggers = "triggers_eng.json" else: triggers = "triggers.json" lang_itm = "IT" if infos.user.lang_n == 0 else "EN" if infos.text == "": say("Cosa devo kitsueliminare?") return Log.a("[Bot: @%s | %s] user: %s ID: %s 'senza trigger'" % (infos.username, infos.user.uid, user, uid)) trigger = infos.text.lower() try: sec = trigger.split(" | ")[0] parola = trigger.split(" | ")[1] except: say("La sintassi e' \"/del_default default | trigger\"!") return Log.a( "[Bot: @%s | %s] user: %s ID: %s 'del_risposte senza args necs'" % (infos.username, infos.user.uid, user, uid)) trigs = json.loads( open("Files/bot_files/%s/%s" % (infos.bid, triggers)).read()) if sec not in trigs: say("Non credo esista questo default...") return Log.a( "[Bot: @%s | %s] user: %s ID: %s 'del_risposte senza avere il trigger'" % (infos.username, infos.user.uid, user, uid)) if not trigs[sec]: say("Ma questo default e' kitsuvuoto...") return Log.a( "[Bot: @%s | %s] user: %s ID: %s 'del_risposte senza frasi'" % (infos.username, infos.user.uid, user, uid)) if parola not in trigs[sec]: say("Questo trigger non e' in %s, kitsu e.e" % sec) return Log.a( "[Bot: @%s | %s] user: %s ID: %s 'del_risposte senza frasi'" % (infos.username, infos.user.uid, user, uid)) if parola + " " in trigs[sec]: trigs[sec] = trigs[sec].replace(parola + " ", "") else: trigs[sec] = trigs[sec].replace(" " + parola, "") with open("Files/bot_files/%s/%s" % (infos.bid, triggers), "w") as file_d: file_d.write(json.dumps(trigs)) say("Default (%s) kitsueliminato!! ~" % lang_itm) Log.a("[Bot: @%s | %s] user: %s ID: %s 'del_default riuscito'" % (infos.username, infos.user.uid, user, uid)) except Exception as err: say("S-si è verificato un errore...") Log.e(err)
def unkown_command(infos): if not infos.chat_private: return Dialoger.send(infos, None, special_text="Comando sconosciuto, kitsu!") Log.a("Comando sconosciuto")
def newbot(infos): user = infos.user.username uid = infos.user.uid say = infos.reply if uid not in auth: say("Per potermi utilizzare devi effettuare una donazione a PayPal.me/KaikyuDev di 5 euro," "includendo come messaggio il tuo ID, se non sai il tuo ID esegui il comando /myid.\n\n" "I server, così come il tempo, hanno un valore.") return if uid in limits: limit = limits[uid] else: limit = 1 if infos.text == "token": say("Non devi scrivere \"token\", devi darmi la **token** del tuo **bot**.", markdown=True) HTTPLL.sendMessage( infos.token, Manager.get_owner_id(), "@%s ha usato /newbot \"token\" lol" % infos.user.username) return if Manager.get_bot_count() >= max_bots and "!!" not in infos.text: say("Tutti i posti sono stati occupati.\nSegui @KitsuneCode per sapere quando ce ne saranno altri ~" ) return msg = "Nuovo bot da %s (ID: %s)" % (user, uid) if infos.text == "": say("La sintassi del comando è semplice:\n/newbot token\nRiprova...") return Log.a("[Bot: @%s | %s] user: %s ID: %s 'newbot senza chiave'" % (infos.username, infos.bid, user, uid)) key = infos.text.replace("!!", "") if Manager.is_token_used(key): Log.a("[Bot: @%s | %s] user: %s ID: %s 'newbot chiave usata'" % (infos.username, infos.bid, user, uid)) return say("Questa chiave è già usata...") if Manager.count_bots(uid) >= limit: Log.a("[Bot: @%s | %s] user: %s ID: %s 'newbot utente ha già un bot'" % (infos.username, infos.bid, user, uid)) return say( "A quanto pare non puoi fare altri bot ne hai già %s su %s..." % (Manager.count_bots(uid), limit)) if ":" not in key or len(key) != 45: say("%s non credo che questa sia una chiave valida." % user) return Log.a("[Bot: @%s | %s] user: %s ID: %s 'newbot chiave errata'" % (infos.username, infos.bid, user, uid)) try: tbot = HTTPLL.getMe(key) txt = "Eccomi master.\nQuesta è una [guida](%s) sul miofunzionamento.\nUnisciti al [gruppo ufficiale](%s) per avere " \ "le novità in tempo reale." % ("telegra.ph/Come-creare-un-KitsuBot-08-20", "t.me/KitsuBotsGroup") HTTPLL.sendMessage(key, uid, text=txt, parse_mode="markdown") msg += "\nHa usato la token %s\n" % key except Exception as err: Log.d( "L'utente non ha avviato il proprio bot, o c'è qualche problema (%s)" % err) return say("Sicuro di aver avviato il tuo bot in privato?") if Manager.add_bot(uid, tbot["id"], tbot["token"]): say("Registrato con successo!\nTutti i prossimi comandi dovrai eseguirli dal tuo bot: @%s\n" "Il tuo bot è il %sesimo su %s!" % (tbot["username"], Manager.get_bot_count(), max_bots)) else: Log.d("Qualcosa è andato storto...") return say("Qualcosa è andato storto!") msg += "Nome %s\nUsername @%s\nID: %s" % (tbot["first_name"], tbot["username"], tbot["id"]) HTTPLL.sendMessage(infos.token, Manager.get_owner_id(), msg) Core.attach_bot(key)
def MayaRun(): update_id = None Log.d("Run Maya") while True: updates = bot.get_updates(offset=update_id) updates = updates["result"] print(updates) print(update_id) if updates: for item in updates: update_id = item["update_id"] try: message = str(item["message"]["text"]) except: message = None from_ = item["message"]["from"]["id"] chat_ = item["message"]["chat"]["id"] first_name_ = item["message"]["from"]["first_name"] try: username_ = item["message"]["from"]["username"] except: username_ = None try: chat_name_ = item["message"]["chat"]["title"] except: chat_name_ = None try: new_chat_member_ = item["message"]["new_chat_participant"] except: new_chat_member_ = None try: gone_chat_member_ = item["message"]["left_chat_member"] except: gone_chat_member_ = None Log.i(from_) Log.i(chat_) if new_chat_member_ is not None: new_chat_member_name_ = item["message"][ "new_chat_participant"]["first_name"] Log.a("welcome") reply = "Welcome " + new_chat_member_name_ + " to " + chat_name_ + " ^^" bot.send_message(reply, chat_) stk = pars.ReadSticker("manomp", "welcome") bot.send_sticker(chat_, stk) if gone_chat_member_ is not None: gone_chat_member_name_ = item["message"][ "left_chat_member"]["first_name"] Log.a("Left") reply = "Goodbye " + gone_chat_member_name_ if from_ == "MayaChan": bot.send_message(reply, chat_) try: reply_to_message_ = item["message"]["reply_to_message"] except: reply_to_message_ = None if reply_to_message_ is not None: reply_to_message_name_ = item["message"][ "reply_to_message"]["from"]["first_name"] reply_id_ = item["message"]["reply_to_message"]["from"][ "id"] reply = repum.reply_to_usermessage(message, first_name_, reply_to_message_name_, chat_, from_, reply_id_) bot.send_message(reply, chat_) if reply_to_message_ is None: if from_ == chat_: reply, parse_mode = trigger.make_reply( message, username_, first_name_) bot.send_message(reply, from_, parse_mode) if from_ != chat_: reply, parse_mode = trigger.make_reply( message, username_, first_name_) bot.send_message(reply, chat_, parse_mode)