def main(self, initial_message=None, call=None, inline_message=None, **kwargs): if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or call).from_user.id if call: inline_message = call.message if kwargs.get('name', None) is None: text = "Welche Tabelle möchtest du anzeigen?" tables = database.get_all_tables() markup = InlineKeyboardMarkup(row_width=2) t = tuple([ InlineKeyboardButton( t, callback_data=self.command + json.dumps({'name': t})) for t in tables ] + [InlineKeyboardButton("Abbrechen", callback_data="abort")]) markup.add(*t) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return table = kwargs['name'] text = util.database.get_table_as_string(table) if text is None: text = "Die Tabelle ist leer." markup = InlineKeyboardMarkup(row_width=1) markup.add( InlineKeyboardButton("Zurück", callback_data=self.command + json.dumps({'name': None}))) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup)
def main(self, initial_message=None, user_message=None, call=None, inline_message=None, **kwargs): if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or user_message or call).from_user.id if call: inline_message = call.message if kwargs.get('id', None) is None: text = "Bitte wähle aus, für was du eine Erinnerung versenden möchtest:" events = util.database.events_that_need_reminder() surveys = util.database.surveys_that_need_reminder() markup = InlineKeyboardMarkup(row_width=1) buttons = list( InlineKeyboardButton(text=e.get_inline_str(), callback_data=self.command + json.dumps({'id': e.id})) for e in events) buttons += list( InlineKeyboardButton(text="Umfrage: " + s.get_inline_str(), callback_data=self.command + json.dumps({'id': s.id})) for s in surveys) markup.add(*tuple(buttons)) markup.add(InlineKeyboardButton("Abbrechen", callback_data="abort")) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return else: text = "Okay, es wurden Erinnerungen versendet" bot.edit_message_text(inline_message=inline_message, text=text) util.functions.send_reminder_for(from_user_id=user_id, id=kwargs['id'])
def new_func(*args, **kwargs): return func(*args, **kwargs) try: return func(*args, **kwargs) except ConnectionResetError: logger.exception("Couldn't catch ConnectionResetError:") pass except ConnectionError: logger.exception("Couldn't catch ConnectionError:") pass except Exception as e: caught = False for a in args: if isinstance(a, Message): chat_id = a.chat.id username = a.from_user.username user_id = a.from_user.id caught = True bot.send_message(chat_id, text=meta.error_text, reply_markup=markups.menu.main(user_id)) elif isinstance(a, CallbackQuery): bot.edit_message_reply_markup(call=a, reply_markup=None) bot.edit_message_text(text=meta.error_text, call=a, reply_markup=None) username = a.from_user.username user_id = a.from_user.id caught = True if caught: bot.send_message(meta.lucas_chat_id, "Bei @{} ist folgender Fehler in der Funktion {} aufgetreten:\n" .format(username, func.__name__) + str(e), reply_markup=markups.menu.main(user_id)) logger.exception("Caught Exception:") break return
def process_email(self, message): user_id = message.from_user.id if message.text == '0': self.store[user_id]['data']['email'] = '' bot.delete_message(message=message) self.__call__(user_message=message) elif check_email(message.text): self.store[user_id]['data']['email'] = message.text bot.delete_message(message=message) self.__call__(user_message=message) else: text = "Die Email wurde nicht erkannt. Bitte versuche es erneut:" bot.delete_message(message=message) msg = bot.edit_message_text(inline_message=self.store[user_id]['inline_message'], text=text) bot.register_next_step_handler(msg, self.process_email) return
def main(self, initial_message=None, user_message=None, call=None, inline_message=None, **kwargs): if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or user_message or call).from_user.id if call: inline_message = call.message surveys = util.database.get_survey() if len(surveys) == 0: bot.reply_to(initial_message, text="Es gibt keine Umfragen.") return if 'survey_id' not in kwargs.keys(): text = "Wähle eine Umfrage aus, die du schließen möchtest:" markup = InlineKeyboardMarkup(row_width=1) buttons = list( InlineKeyboardButton(text=s.get_inline_str(), callback_data=self.command + json.dumps({'survey_id': s.survey_id})) for s in surveys) markup.add(*tuple(buttons)) markup.add(InlineKeyboardButton("Abbrechen", callback_data="abort")) msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return if 'sure' not in kwargs.keys(): survey = database.get_survey(survey_id=kwargs.get('survey_id')) text = "Bist du sicher, dass du folgende Umfrage schließen möchtest?\n\n" + survey.get_detail_str( ) markup = InlineKeyboardMarkup(row_width=2) markup.add( InlineKeyboardButton(text="Ja", callback_data=self.command + json.dumps({'sure': True})), InlineKeyboardButton(text="Nein", callback_data=self.command + json.dumps({'sure': False}))) markup.add( InlineKeyboardButton(text="Abbrechen", callback_data="abort")) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) return if not kwargs['sure']: text = "Schade, dann ist wohl etwas schiefgegangen... Bitte versuche es ggfs erneut." else: text = "Okay, die Umfrage wurde geschlossen. Antworten können nicht mehr geändert werden." util.database.close_survey(survey_id=kwargs['survey_id']) bot.edit_message_text(inline_message=inline_message, text=text) self.store[user_id] = dict() self.store[user_id]['data'] = dict() self.store[user_id]['inline_message'] = None return
def main(self, initial_message=None, user_message=None, call=None, inline_message=None, **kwargs): if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or user_message or call).from_user.id if initial_message: d = initial_message.text.replace('_probe', '').strip() self.store[user_id]['data']['date'] = d if call: inline_message = call.message if self.store[user_id].get('frichtle') is None: #self.store[user_id]['frichtle'] = util.database.get_frichtle() self.store[user_id]['frichtle'] = util.classes.fake_frichtle.copy() if self.store[user_id].get('set_frichtle') is None: self.store[user_id]['set_frichtle'] = [] if len(self.store[user_id]['set_frichtle']) > 0: self.store[user_id]['set_frichtle'] = sorted(self.store[user_id]['set_frichtle'], key=lambda f: f.first_name) text = "Ausgewählte Frichtle:\n" + "\n".join([f.get_inline_str() for f in self.store[user_id]['set_frichtle']]) text += "\n\n" else: text = "" if not kwargs.get('done', False): if kwargs.get('register') is None: text += "Wähle Register aus:" markup = InlineKeyboardMarkup(row_width=1) buttons = list(InlineKeyboardButton(text=r, callback_data=self.command + json.dumps({'register': r})) for r in meta.registers.keys()) markup.add(*tuple(buttons)) markup.add(InlineKeyboardButton("Fertig", callback_data=self.command + json.dumps({'done': True}))) markup.add(InlineKeyboardButton("Abbrechen", callback_data="abort")) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return if kwargs.get('user_id') is None: text += "Wähle Frichtle aus {} aus:".format(kwargs['register']) register_instruments = meta.registers[kwargs['register']] register_frichtle = list(filter(lambda f: f.instrument in register_instruments, self.store[user_id]['frichtle'])) markup = InlineKeyboardMarkup(row_width=1) buttons = list(InlineKeyboardButton(text=f.get_inline_str(), callback_data=self.command + json.dumps({'user_id': f.user_id})) for f in register_frichtle) markup.add(*tuple(buttons)) markup.add(InlineKeyboardButton("Zurück", callback_data=self.command + json.dumps({'register': None}))) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return if kwargs.get('done') is None: f = list(filter(lambda f: f.user_id == kwargs['user_id'], self.store[user_id]['frichtle']))[0] self.store[user_id]['frichtle'].pop(self.store[user_id]['frichtle'].index(f)) self.store[user_id]['set_frichtle'].append(f) self.store[user_id]['data'].pop('user_id') self.__call__(inline_message=inline_message) return if kwargs.get('email') is None: text = "Okay, gib deine Email Adresse ein:\nFalls du keine Email erhalten möchtest, gib '0' ein." msg = bot.edit_message_text(inline_message=inline_message, text=text) bot.register_next_step_handler(msg, self.process_email) return if kwargs.get('send') is None: if kwargs['email'] == '': text += "Keine Email angegeben." button_text = "Speichern" else: text += "Email Adresse: {}".format(kwargs['email']) button_text = "Senden" markup = InlineKeyboardMarkup(row_width=2) markup.add(InlineKeyboardButton(text=button_text, callback_data=self.command + json.dumps({'send': True})), InlineKeyboardButton(text="Zurück", callback_data=self.command + json.dumps({'send': False, 'done': False}))) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return if kwargs.get('send'): util.functions.save_rehersal_attendance(frichtle=self.store[user_id]['set_frichtle'], date=self.store[user_id]['data']['date']) if '@' in kwargs.get('email'): email_text = util.functions.rehersal_email_text(frichtle=self.store[user_id]['set_frichtle']) subject = "Anwesenheit Probe {}".format(self.store[user_id]['data']['date']) success = util.functions.send_email(email=kwargs.get('email', 'Keine Email'), subject=subject, text=email_text) if success: text = "Okay, Email wurde gesendet. Anwesenheit abgeschlossen." else: text = "Die Email konnte nicht versandt werden." else: text = "Es wurde keine Email versandt." text += "\nDie Anwesenheit wurde lokal gespeichert." bot.edit_message_text(inline_message=inline_message, text=text) return else: self.store[user_id]['done'] = False self.__call__(inline_message=inline_message) return
def main(self, initial_message=None, user_message=None, call=None, inline_message=None, **kwargs): if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or user_message or call).from_user.id if user_message: bot.delete_message(chat_id=user_message.chat.id, message_id=user_message.message_id) if call: inline_message = call.message if initial_message: bot.reply_to(initial_message, text=meta.new_event_guide) if kwargs.get('done', False): # send sure reply markup if kwargs.get('sure') is None: event = self.store[user_id]['event'] text = "Der Termin ist lautet:\n" + event.get_detail_str() + "\n\nSoll er gespeichert werden?" markup = InlineKeyboardMarkup(row_width=2) markup.add(InlineKeyboardButton(text="Ja", callback_data=self.command + json.dumps({'sure': True}))) markup.add(InlineKeyboardButton(text="Zurück", callback_data=self.command + json.dumps({'done': None, 'property': None}))) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) return if kwargs.get('send_notice') is None: if not kwargs.get('sure'): self.store[user_id]['property'] = None self.__call__(call=call) return else: event = self.store[user_id]['event'] database.save_event(event) text = "Okay, der Termin wurde erstellt.\n" \ "Möchtest du alle wissen lassen, sodass sie zu oder absagen können?" markup = InlineKeyboardMarkup(row_width=2) markup.add( InlineKeyboardButton(text="Ja", callback_data=self.command + json.dumps({'send_notice': True})), InlineKeyboardButton(text="Nein", callback_data=self.command + json.dumps({'send_notice': False}))) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) return if not kwargs.get('send_notice'): text = "Okay, es werden keine Nachrichten versandt." else: text = "Okay, es wurden Nachrichten an alle versandt." util.functions.send_new_event_alert(by=util.database.get_frichtle(user_id=user_id), event=self.store[user_id]['event']) bot.edit_message_text(inline_message=inline_message, text=text) self.store[user_id] = dict() self.store[user_id]['data'] = dict() self.store[user_id]['inline_message'] = None return if kwargs.get('property') is None: e = self.store[user_id].get('event', Event()) e.event_id = util.database.get_new_event_id() self.store[user_id]['event'] = e text = "Aktuell sieht der Termin folgendermaßen aus:\n" + e.get_detail_str() + "\n\nBitte wähle aus, um zu Daten einzugeben:" markup = InlineKeyboardMarkup(row_width=2) buttons = [] for i, v in enumerate(meta.event_col_names_display): buttons.append(InlineKeyboardButton(text=v, callback_data=self.command + json.dumps({'property': meta.event_col_names[i]}))) buttons.append(InlineKeyboardButton(text="Fertig", callback_data=self.command + json.dumps({'done': True, 'property': ''}))) buttons.append(InlineKeyboardButton(text="Abbrechen", callback_data="abort")) markup.add(*tuple(buttons)) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) elif call: msg = bot.edit_message_text(call=call, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return if kwargs['property'] == "dress": if kwargs.get('value') is None: text = "Okay, bitte wähle ein Outfit:" markup = InlineKeyboardMarkup(row_width=2) markup.add(*tuple([InlineKeyboardButton(text=s, callback_data=self.command + json.dumps( {'value': s} )) for s in meta.dresses] + [InlineKeyboardButton(text="Zurück", callback_data=self.command + json.dumps({'property': None, 'value': None}))])) bot.edit_message_text(text=text, inline_message=inline_message, reply_markup=markup) else: event = self.store[user_id]['event'] event.dress = kwargs.pop('value') self.store[user_id]['data'].pop('value') self.store[user_id]['data'].pop('property') self.__call__(call=call) return else: prop_display = meta.event_col_names_display[meta.event_col_names.index(kwargs.get('property'))] text = "Okay, gib '{}' ein:".format(prop_display) hint = meta.event_col_names_hints.get(kwargs['property']) if hint is not None: text += "\n{}".format(hint) msg = bot.edit_message_text(inline_message=inline_message, text=text) bot.register_next_step_handler(msg, self.property_reply) return
def main(self, initial_message=None, call=None, inline_message=None, **kwargs): if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or call).from_user.id if call: inline_message = call.message if kwargs.get('att', None) is None: text = "Welche Termine möchtest du anzeigen?" markup = InlineKeyboardMarkup(row_width=1) markup.add(InlineKeyboardButton(text="Ausstehende Rückmeldungen", callback_data=self.command + json.dumps({'att': 1}))) markup.add(InlineKeyboardButton(text="Meine Zusagen", callback_data=self.command + json.dumps({'att': 3}))) markup.add(InlineKeyboardButton(text="Meine Absagen", callback_data=self.command + json.dumps({'att': 2}))) markup.add(InlineKeyboardButton("Beenden", callback_data="end")) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return if kwargs.get('event_id', None) is None: events = [d['ev'] for d in util.database.get_events_from_user(user_id=user_id, attendance=kwargs['att'])] if len(events) > 0: text = "Wähle aus, um den Termin anzuzeigen:" else: text = "Keine entsprechenden Termine gefunden." markup = InlineKeyboardMarkup(row_width=1) buttons = list(InlineKeyboardButton(text=e.get_inline_str(), callback_data=self.command + json.dumps({'event_id': e.event_id})) for e in events) markup.add(*tuple(buttons)) markup.add(InlineKeyboardButton("Zurück", callback_data=self.command + json.dumps({'att': None}))) bot.edit_message_text(text=text, inline_message=inline_message, reply_markup=markup) return event = util.database.get_event(event_id=kwargs['event_id']) if kwargs.get('edit', None) is None: text = event.get_detail_str() text += "\nDu hast {}" markup_text = "Ändern" if kwargs['att'] == 3: text = text.format("ZUGESAGT.") elif kwargs['att'] == 2: text = text.format("ABGESAGT.") elif kwargs['att'] == 1: text = text.format("noch keine Rückmeldung gegeben.") markup_text = "Rückmeldung geben" markup = InlineKeyboardMarkup(row_width=2) markup.add(InlineKeyboardButton(text=markup_text, callback_data=self.command + json.dumps({'edit': True})), InlineKeyboardButton(text="Zurück", callback_data=self.command + json.dumps({'event_id': None}))) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) return text = "Kommst du zu folgendem Event?\n" + event.get_detail_str() if kwargs.get('att_new', None) is None: # send sure reply markup markup = InlineKeyboardMarkup(row_width=2) markup.add(InlineKeyboardButton(text="Ja", callback_data=self.command + json.dumps({'att_new': 3})), InlineKeyboardButton(text="Nein", callback_data=self.command + json.dumps({'att_new': 2})), InlineKeyboardButton(text="Weiß doch nicht", callback_data=self.command + json.dumps({"att_new": 1})), InlineKeyboardButton(text="Zurück", callback_data=self.command + json.dumps({'edit': None}))) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) return util.database.set_attendance_to_event(event_id=kwargs['event_id'], user_id=user_id, att=kwargs['att_new']) if kwargs['att_new'] == 3: text = "\n\nDu hast ZUGESAGT." elif kwargs['att_new'] == 2: text = "\n\nDu hast ABGESAGT." elif kwargs['att_new'] == 1: text = "\n\nDeine Rückmeldung wurde entfernt." text += "\n Wähle neuen Termin aus:" events = [e['ev'] for e in util.database.get_events_from_user(user_id=user_id, attendance=kwargs['att'])] markup = InlineKeyboardMarkup(row_width=1) buttons = list(InlineKeyboardButton(text=e.get_inline_str(), callback_data=self.command + json.dumps({'event_id': e.event_id})) for e in events) markup.add(*tuple(buttons)) markup.add(InlineKeyboardButton("Zurück", callback_data=self.command + json.dumps({'att': None}))) self.store[user_id]['data'].update({'event_id': None, 'att_new': None, 'edit': None}) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup)
def main(self, initial_message=None, user_message=None, call=None, inline_message=None, **kwargs): if initial_message: f = Frichtle.from_user(initial_message.from_user) user_id = f.user_id self.store[user_id]['new_frichtle'] = f else: if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or user_message or call).from_user.id f = self.store[user_id]['new_frichtle'] text = "Hallo {},\n\n".format(f.first_name) if user_message: bot.delete_message(chat_id=user_message.chat.id, message_id=user_message.message_id) if call: inline_message = call.message if inline_message is None: inline_message = self.store[user_id]['inline_message'] if 'abort' in kwargs.keys(): del self.store[user_id] bot.edit_message_text(inline_message=inline_message, text="Der Vorgang wurde abgebrochen und deine angegebenen Daten wurden gelöscht. Falls du möchtest, starte bitte erneut über den Einladungslink.\nLieben Gruß\nLucas") if 'done' in kwargs.keys() and kwargs.get('done'): util.database.add_frichtle(self.store[user_id]['new_frichtle']) bot.edit_message_text(inline_message=inline_message, text="Okay, du wurdest gespeichert und wirst jetzt zum Hauptmenü weitergeleitet.") bot.send_message(chat_id=user_id, text="Hauptmenü", reply_markup=markups.menu.main(user_id=user_id)) return if initial_message: text += "Du hast folgenden Namen in Telegram hinterlegt:\n{} {}\nMöchtest du einen anderen Namen eingeben, mit dem dich andere sehen können? Ein Name, unter dem man dich erkennt wäre sehr hilfreich 😉".format(f.first_name, f.last_name) markup = InlineKeyboardMarkup(row_width=2) buttons = [InlineKeyboardButton(text="Ja, bitte", callback_data=self.command + json.dumps({'name_okay': False})), InlineKeyboardButton(text="Nein, passt", callback_data=self.command + json.dumps({'name_okay': True}))] markup.add(*tuple(buttons)) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return if not kwargs.get('name_okay'): text += "Okay, bitte gib einen anderen Namen ein:" msg = bot.edit_message_text(inline_message=self.store[user_id]['inline_message'], text=text) bot.register_next_step_handler(msg, self.change_name_reply) return if kwargs.get('instr', None) is None: text += "Bitte wähle dein Instrument?" markup = InlineKeyboardMarkup(row_width=2) buttons = [InlineKeyboardButton(text=instr, callback_data=self.command + json.dumps({'instr': instr})) for instr in meta.instruments] markup.add(*tuple(buttons)) bot.edit_message_text(text=text, inline_message=inline_message, reply_markup=markup) return else: self.store[user_id]['new_frichtle'].instrument = kwargs.get('instr') if not kwargs.get('done', False): text += "Die folgenden Daten werden in einer verschlüsselten Datenbank abgelegt. Dieser Bot steht in keiner direkten Verbindung zum Verein und umgeht deshalb jegliche Richtlinien der DSGVO. Bei Fragen zur Datenspeicherung, kannst du jederzeit Lucas (@LucasBurger) anschreiben.\n\n" text += "Zusammenfassung:\n{}\n\nEinverstanden?".format(self.store[user_id]['new_frichtle'].get_detail_str()) markup = InlineKeyboardMarkup() markup.add(InlineKeyboardButton(text="Instrument ändern", callback_data=self.command + json.dumps({'instr': None}))) markup.add(InlineKeyboardButton(text="Name ändern", callback_data=self.command + json.dumps({'name_okay': False}))) markup.add(InlineKeyboardButton(text="Einverstanden!", callback_data=self.command + json.dumps({'done': True}))) bot.edit_message_text(text=text, inline_message=inline_message, reply_markup=markup) return
def main(self, initial_message=None, user_message=None, call=None, inline_message=None, **kwargs): if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or user_message or call).from_user.id surveys = util.database.get_survey() if len(surveys) == 0: bot.reply_to(message=initial_message, text="Es gibt aktuell keine Umfragen.") del self.store[user_id] return if call: inline_message = call.message if user_message: bot.delete_message(chat_id=user_message.chat.id, message_id=user_message.message_id) if kwargs.get('survey_id', None) is None: text = "Welche Umfrage möchtest du anzeigen?" buttons = [] for s in surveys: if util.database.check_survey_response( user_id=user_id, survey_id=s.survey_id) is None: replace = "Unbeantwortet: " else: replace = "" buttons.append( InlineKeyboardButton( text=s.get_inline_str().replace("Umfrage: ", replace), callback_data=self.command + json.dumps({'survey_id': s.survey_id}))) markup = InlineKeyboardMarkup(row_width=1) markup.add(*tuple(buttons)) markup.add(InlineKeyboardButton("Beenden", callback_data="end")) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return survey = util.database.get_survey(survey_id=kwargs['survey_id']) if kwargs.get('edit', None) is None: text = survey.get_detail_str() res = survey.results[user_id] buttons = [] if res is None: text += "\n\nDu hast noch nicht geantwortet." buttons.append( InlineKeyboardButton(text="Jetzt antworten", callback_data=self.command + json.dumps({'edit': True}))) else: text += "\n\nDu hast mit '{}' geantwortet".format(res) if survey.active: buttons.append( InlineKeyboardButton(text="Ändern", callback_data=self.command + json.dumps({'edit': True}))) if not survey.active: text += "\nDie Umfrage ist geschlossen." buttons.append( InlineKeyboardButton(text="Zurück", callback_data=self.command + json.dumps({'survey_id': None}))) markup = InlineKeyboardMarkup(row_width=2) markup.add(*tuple(buttons)) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) return if kwargs["edit"] and self.store[user_id]["data"].get( "response", None) is None: self.store[user_id]["data"]["response"] = [None] * len( survey.questions) res = kwargs.pop("res", None) if res is not None: self.store[user_id]["data"]["response"][res[0]] = res[1] i = 0 while i < len(survey.questions): if self.store[user_id]["data"]["response"][i] is None: break i += 1 if i < len(survey.questions): text = survey.get_detail_str( question=i) + "\n\nWie lautet deine Antwort?" if isinstance(survey.questions[i]["answers"], list): buttons = [] for r in survey.questions[i]["answers"]: buttons.append( InlineKeyboardButton(text=r, callback_data=self.command + json.dumps({'res': [i, r]}))) markup = InlineKeyboardMarkup(row_width=2) markup.add( *tuple(buttons), InlineKeyboardButton(text="Zurück", callback_data=self.command + json.dumps({'edit': None}))) elif survey.questions[i]["answers"].lower() == 'count': page = kwargs.get('page', 1) markup = markups.inline.show_numbers(command=self.command, return_name='res', question=i, page=page) else: # free reply text = survey.get_detail_str( ) + "\n\nOkay, gib deine Antwort ein:" msg = bot.edit_message_text(inline_message=inline_message, text=text) bot.register_next_step_handler(msg, self.survey_reply, question=i) return if i < len(survey.questions): bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) return util.database.set_response_to_survey( survey_id=kwargs['survey_id'], user_id=user_id, response=self.store[user_id]["data"]["response"]) final_answer = " ".join( [str(r) for r in self.store[user_id]["data"]["response"]]) text = f"\n\nDu hast mit '{final_answer}' geantwortet." text += "\n Wähle neue Umfrage aus:" buttons = [] for s in surveys: if util.database.check_survey_response( user_id=user_id, survey_id=s.survey_id) == '': replace = "Unbeantwortet: " else: replace = "" buttons.append( InlineKeyboardButton(text=s.get_inline_str().replace( "Umfrage: ", replace), callback_data=self.command + json.dumps({'survey_id': s.survey_id}))) markup = InlineKeyboardMarkup(row_width=1) markup.add(*tuple(buttons)) markup.add(InlineKeyboardButton("Beenden", callback_data="end")) self.store[user_id]['data'].update({ 'survey_id': None, 'edit': None, 'res': None, "response": None }) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup)
def main(self, initial_message=None, user_message=None, call=None, inline_message=None, **kwargs): if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or user_message or call).from_user.id if call: inline_message = call.message if 'event_id' not in kwargs.keys(): text = "Wähle einen Termin aus, den du absagen möchtest:" markup = InlineKeyboardMarkup(row_width=1) buttons = list( InlineKeyboardButton(text=e.get_inline_str(), callback_data=self.command + json.dumps({'event_id': e.event_id})) for e in database.get_event()) markup.add(*tuple(buttons)) markup.add(InlineKeyboardButton("Abbrechen", callback_data="abort")) msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return if 'sure' not in kwargs.keys(): event = database.get_event(event_id=kwargs.get('event_id')) text = "Bist du sicher, dass du folgenden Termin absagen möchtest?\n\n" + event.get_detail_str( ) markup = InlineKeyboardMarkup(row_width=2) markup.add( InlineKeyboardButton(text="Ja", callback_data=self.command + json.dumps({'sure': True})), InlineKeyboardButton(text="Nein", callback_data=self.command + json.dumps({'sure': False}))) markup.add( InlineKeyboardButton(text="Abbrechen", callback_data="abort")) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) return if 'send_notice' not in kwargs.keys(): if not kwargs.get('sure'): text = "Schade, dann ist wohl etwas schiefgegangen... Bitte versuche es ggfs erneut." markup = None else: event = database.get_event(event_id=kwargs.get('event_id')) text = "Okay, der Termin wurde abgesagt.\n" \ "Möchtest du alle wissen lassen, dass der Termin abgesagt wurde?" markup = InlineKeyboardMarkup(row_width=2) markup.add( InlineKeyboardButton(text="Ja", callback_data=self.command + json.dumps({'send_notice': True})), InlineKeyboardButton(text="Nein", callback_data=self.command + json.dumps({'send_notice': False}))) markup.add( InlineKeyboardButton(text="Abbrechen", callback_data="abort")) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) return if not kwargs.get('send_notice'): text = "Okay, es werden keine Nachrichten versandt." else: text = "Okay, es wurden Nachrichten an alle versandt." util.functions.send_cancel_event_notice( who_cancel=user_id, event_id=kwargs['event_id']) bot.edit_message_text(inline_message=inline_message, text=text) self.store[user_id] = dict() self.store[user_id]['data'] = dict() self.store[user_id]['inline_message'] = None return
def main(self, initial_message=None, call=None, inline_message=None, **kwargs): if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or call).from_user.id if call: inline_message = call.message if kwargs.get('typ', None) is None: text = "Bitte wähle aus:" markup = InlineKeyboardMarkup(row_width=1) markup.add( InlineKeyboardButton(text="Schritte", callback_data=self.command + json.dumps({'typ': "s"}))) markup.add( InlineKeyboardButton(text="Märsche", callback_data=self.command + json.dumps({'typ': "m"}))) markup.add( InlineKeyboardButton(text="Bühnenstücke", callback_data=self.command + json.dumps({'typ': "b"}))) markup.add(InlineKeyboardButton("Beenden", callback_data="end")) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return typ = { "s": "Schritte", "m": "Maersche", "b": "Buehnenstuecke" }[kwargs['typ']] if kwargs.get('sheet_id', None) is None: noten = copy(meta.noten[typ]) for i, n in enumerate(noten): v = n[0] v = v.replace("ae", "ä") v = v.replace("ue", "ü") v = v.replace("oe", "ö") v = v.replace("_", " ") noten[i] = (v, noten[i][1]) markup = InlineKeyboardMarkup(row_width=1) buttons = list( InlineKeyboardButton(text=n[0], callback_data=self.command + json.dumps({'sheet_id': n[1]})) for n in noten) markup.add(*tuple(buttons)) markup.add( InlineKeyboardButton("Zurück", callback_data=self.command + json.dumps({'typ': None}))) bot.edit_message_text(text="Bitte wähle aus:", inline_message=inline_message, reply_markup=markup) return noten = meta.noten[typ] for l in noten: if l[1] == kwargs['sheet_id']: name = l[0] break noten_path = meta.noten_path.format(typ=typ, name=name) bot.delete_message(message=inline_message) bot.send_document(chat_id=inline_message.chat.id, data=open(noten_path, "rb"), caption="Bitteschön!")
def main(self, initial_message=None, user_message=None, call=None, inline_message=None, **kwargs): if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or user_message or call).from_user.id if call: inline_message = call.message buttons = [] markup = None events = util.database.get_event() if len(events) == 0: bot.reply_to(initial_message, text="Es gibt aktuell keine Termine.") return if kwargs.get('event_id') is None: text = "Wähle einen Termin aus:" markup = InlineKeyboardMarkup(row_width=1) buttons = list( InlineKeyboardButton(text=s.get_inline_str(), callback_data=self.command + json.dumps({'event_id': s.event_id})) for s in database.get_event()) markup.add(*tuple(buttons)) markup.add(InlineKeyboardButton("Beenden", callback_data="end")) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return event = util.database.get_event(event_id=kwargs['event_id']) text = util.functions.get_event_summary(**kwargs) if not kwargs.get('detail', False): # erinnerung if kwargs['event_id'] in [s.event_id for s in util.database.events_that_need_reminder()] and \ not self.store[user_id].get('sent_reminder', False): buttons.append( InlineKeyboardButton(text="Erinnern", callback_data=self.command + json.dumps({'remind': True}))) # detail if not kwargs.get('detail', False) and any( s['attendance'] >= 2 for s in util.database.get_event_attendance(event=event)): buttons.append( InlineKeyboardButton(text="Details", callback_data=self.command + json.dumps({'detail': True}))) # back button if kwargs.get('detail', False): dump = {'detail': False} else: dump = {'event_id': None} buttons.append( InlineKeyboardButton(text="Zurück", callback_data=self.command + json.dumps(dump))) markup = InlineKeyboardMarkup(row_width=2) markup.add(*tuple(buttons)) if kwargs.get('remind', False): util.functions.send_reminder_for(from_user_id=user_id, _id=kwargs['event_id']) self.store[user_id]['sent_reminder'] = True text = "Es wurden Erinnerungen versandt." dump = {'remind': False, 'detail': False} markup = InlineKeyboardMarkup(row_width=1) markup.add( InlineKeyboardButton(text="Zurück", callback_data=self.command + json.dumps(dump))) if markup is None and kwargs['detail']: markup = InlineKeyboardMarkup() markup.add( InlineKeyboardButton(text="Zurück", callback_data=self.command + json.dumps({'detail': False}))) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return
def end_action(call): bot.edit_message_text(call=call, text="Okay, beendet.")
def abort_action(call): bot.edit_message_text(call=call, text="Okay, die Aktion wurde abgebrochen.")
def main(self, initial_message=None, user_message=None, call=None, inline_message=None, **kwargs): if inline_message: user_id = inline_message.chat.id else: user_id = (initial_message or user_message or call).from_user.id if user_message: bot.delete_message(chat_id=user_message.chat.id, message_id=user_message.message_id) if call: inline_message = call.message if kwargs.get('event_id', None) is None: text = "Wähle einen Termin aus, den du bearbeiten möchtest:" markup = InlineKeyboardMarkup(row_width=1) buttons = list(InlineKeyboardButton(text=e.get_inline_str(), callback_data=self.command + json.dumps({'event_id': e.event_id})) for e in database.get_event()) markup.add(*tuple(buttons)) markup.add(InlineKeyboardButton("Abbrechen", callback_data="abort")) if inline_message: msg = bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) else: msg = bot.send_message(initial_message.chat.id, text=text, reply_markup=markup) self.store[user_id]['inline_message'] = msg return else: event = database.get_event(event_id=kwargs['event_id']) text = "Du bearbeitest folgenden Termin:\n" + event.get_detail_str() + "\n\n" if kwargs.get('property', None) is None: text += "Was möchtest du bearbeiten?" markup = InlineKeyboardMarkup(row_width=2) buttons = [] for i, v in enumerate(meta.event_col_names_display): buttons.append(InlineKeyboardButton(text=v, callback_data=self.command + json.dumps({'property': meta.event_col_names[i]}))) buttons.append(InlineKeyboardButton("Zurück", callback_data=self.command + json.dumps({'event_id': None}))) buttons.append(InlineKeyboardButton(text="Abbrechen", callback_data="abort")) markup.add(*tuple(buttons)) bot.edit_message_text(text=text, inline_message=inline_message, reply_markup=markup) return if kwargs['property'] == "dress": if kwargs.get('new_value') is None: text += "Okay, bitte wähle ein Outfit:" markup = InlineKeyboardMarkup(row_width=2) markup.add(*tuple([InlineKeyboardButton(text=s, callback_data=self.command + json.dumps( {'new_value': s} )) for s in meta.dresses] + [InlineKeyboardButton(text="Zurück", callback_data=self.command + json.dumps({'property': None, 'new_value': None}))])) bot.edit_message_text(text=text, inline_message=inline_message, reply_markup=markup) else: event = util.database.get_event(event_id=self.store[user_id]['data']['event_id']) event.dress = kwargs.pop('new_value') util.database.save_event(ev=event) self.store[user_id]['data'].pop('new_value') self.store[user_id]['data'].pop('property') self.__call__(call=call) return elif 'new_value' not in kwargs.keys(): prop_display = meta.event_col_names_display[meta.event_col_names.index(kwargs.get('property'))] text += "Okay, gib einen neuen Wert für '{}' ein:".format(prop_display) hint = meta.event_col_names_hints.get(kwargs['property']) if hint is not None: text += "\n{}".format(hint) msg = bot.edit_message_text(inline_message=inline_message, text=text) bot.register_next_step_handler(msg, self.edit_property_reply) return if 'sure' not in kwargs.keys(): # send sure reply markup event = database.get_event(event_id=kwargs.get('event_id')) setattr(event, kwargs.get('property'), kwargs.get('new_value')) text = "Der bearbeitete Termin ist jetzt:\n" + event.get_detail_str() + "\n\nSoll er gespeichert werden?" markup = InlineKeyboardMarkup(row_width=2) markup.add(InlineKeyboardButton(text="Ja", callback_data=self.command + json.dumps({'sure': True})), InlineKeyboardButton(text="Nein", callback_data=self.command + json.dumps({'sure': False}))) markup.add(InlineKeyboardButton(text="Abbrechen", callback_data="abort")) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) return if 'send_notice' not in kwargs.keys(): if not kwargs.get('sure'): text = "Schade, dann ist wohl etwas schiefgegangen... Bitte versuche es ggfs erneut." markup = None else: event = database.get_event(event_id=kwargs.get('event_id')) setattr(event, kwargs.get('property'), kwargs.get('new_value')) database.save_event(event) text = "Okay, die Änderungen wurden gespeichert.\n" \ "Möchtest du alle wissen lassen, dass sich der Termin geändert hat?" markup = InlineKeyboardMarkup(row_width=2) markup.add(InlineKeyboardButton(text="Ja", callback_data=self.command + json.dumps({'send_notice': True})), InlineKeyboardButton(text="Nein", callback_data=self.command + json.dumps({'send_notice': False}))) markup.add(InlineKeyboardButton(text="Abbrechen", callback_data="abort")) bot.edit_message_text(inline_message=inline_message, text=text, reply_markup=markup) return if not kwargs.get('send_notice'): text = "Okay, es werden keine Nachrichten versandt." else: text = "Okay, es wurden Nachrichten an alle versandt." util.functions.send_event_edit_notice(who_edit=user_id, event_id=kwargs.get('event_id')) bot.edit_message_text(inline_message=inline_message, text=text) self.store[user_id] = dict() self.store[user_id]['data'] = dict() self.store[user_id]['inline_message'] = None return