def variable_message(message: telegram.Message, assignment_list: List[Assignment]): send_text = '' for assignment in assignment_list: send_text += assignment.display(message.from_user.language_code) + '\n' send_message(message.chat_id, send_text, delete_after=40) delete_message(message.chat_id, message.message_id, 25)
def handle_clear_variables(message: telegram.Message, player: Player, **_): _ = partial(get_by_user, user=message.from_user) player.variable_set.all().delete() send_text = _( Text.VARIABLE_CLEARED).format(character=player.character_name) send_message(message.chat_id, send_text, delete_after=20) delete_message(message.chat_id, message.message_id)
def finish_gm_mode(message: telegram.Message, chat: Chat): _ = partial(get_by_user, user=message.from_user) if chat.gm_mode: if chat.gm_mode_notice: delete_message(chat.chat_id, chat.gm_mode_notice, 20) chat.gm_mode = False chat.gm_mode_notice = None chat.save() send_message(chat.chat_id, _(Text.FINISH_GM_MODE), delete_after=20) delete_message(message.chat_id, message.message_id)
def handle_start(message: telegram.Message, **_kwargs): _ = partial(get_by_user, user=message.from_user) if not is_group_chat(message.chat): send_message(message.chat_id, _(Text.START_TEXT), reply_to=message.message_id) return chat = get_chat(message.chat) if not chat.recording: chat.recording = True chat.save() send_message(message.chat_id, '#start {}'.format(_(Text.START_RECORDING))) else: error_message(message, _(Text.ALREADY_STARTED))
def handle_set_dice_face(message: telegram.Message, text: str, **_kwargs): _ = partial(get_by_user, user=message.from_user) chat = get_chat(message.chat) try: face = int(text.strip()) except ValueError: return error_message( message, _(Text.SET_DEFAULT_FACE_SYNTAX).format( face=chat.default_dice_face)) chat.default_dice_face = face chat.save() delete_message(message.chat_id, message.message_id) send_message(message.chat_id, _(Text.DEFAULT_FACE_SETTLED).format(face))
def handle_list_variables(message: telegram.Message, name: str, player: Player, **_): _ = partial(get_by_user, user=message.from_user) content = '' have_variable = False for variable in player.variable_set.order_by('updated').all(): have_variable = True content += '<code>${}</code> {}\n'.format(variable.name, variable.value) if not have_variable: content = _(Text.VARIABLE_LIST_EMPTY) send_text = '<b>{}</b>\n\n{}'.format( _(Text.VARIABLE_LIST_TITLE).format(character=name), content) send_message(message.chat_id, send_text, delete_after=30) delete_message(message.chat_id, message.message_id)
def set_password(update, context: CallbackContext): message = update.message assert isinstance(message, telegram.Message) args = context.args _ = partial(get_by_user, user=message.from_user) if len(args) > 1: text = _(Text.PASSWORD_USAGE) return error_message(message, text) chat = get_chat(message.chat) if args: password = str(args[0]) chat.password = sha256(password.encode()).hexdigest() else: chat.password = '' chat.save() send_message(message.chat_id, _(Text.PASSWORD_SUCCESS), message.message_id)
def set_name(update: telegram.Update, context: CallbackContext): bot = context args = context.args message = update.message assert isinstance(message, telegram.Message) _ = partial(get_by_user, user=message.from_user) if len(args) == 0: return error_message(message, _(Text.NAME_SYNTAX_ERROR)) user = message.from_user assert isinstance(user, telegram.User) name = ' '.join(args).strip() player = create_player(bot, message, name) if player.is_gm: template = _(Text.NAME_SUCCESS_GM) else: template = _(Text.NAME_SUCCESS) send_text = template.format(player=user.full_name, character=name) send_message(message.chat_id, send_text) delete_message(message.chat_id, message.message_id)
def handle_message(update: telegram.Update, context: CallbackContext): bot = context .bot message: telegram.Message = update.message edit_log = None if update.edited_message: message = update.edited_message edit_log = Log.objects.filter(chat__chat_id=message.chat_id, source_message_id=message.message_id).first() cancel_delete_message(message.chat_id, message. message_id) elif not isinstance(message, telegram.Message): return elif not isinstance(message.from_user, telegram.User): return language_code: str = message.from_user.language_code def _(x: Text): return get(x, language_code) with_photo = get_maximum_photo(message) text = message.text if with_photo: text = message.caption if not isinstance(text, str): return # ignore ellipsis elif is_ellipsis(text): return if not is_group_chat(message.chat): message.reply_text(_(Text.NOT_GROUP)) return chat = get_chat(message.chat) player = get_player_by_id(message.chat_id, message.from_user.id) # handle GM mode if player and player.is_gm and (is_start_gm_mode(text) or is_finish_gm_mode(text)): if is_start_gm_mode(text): start_gm_mode(bot, message, chat) if len(text.rstrip()) == 1: delete_message(message.chat_id, message.message_id) return elif is_finish_gm_mode(text): finish_gm_mode(message, chat) return # not start with . / 。, ignore elif not is_command(text): return # user hasn't set name if not player: error_message(message, _(Text.NOT_SET_NAME)) return # in the GM mode if chat.gm_mode and not player.is_gm and not edit_log: if is_command(text): send_message( chat.chat_id, _(Text.PLAYER_IN_THE_GM_MODE), reply_to=message.message_id, delete_after=5 ) return name = player.character_name for pattern, handler in message_handlers: result = patterns.split(pattern, text) if not result: continue command, start = result rest = text[start:] if handler is not handle_as_say and edit_log: after_edit_delete_previous_message(edit_log.id) handler( bot=bot, chat=chat, player=player, command=command, start=start, name=name, text=rest, message=message, job_queue=context.job_queue, with_photo=with_photo, language_code=language_code, edit_log=edit_log, context=Context(bot, chat, player, command, name, start, rest, message, context.job_queue, language_code, with_photo, edit_log) ) return handle_say(chat, message, name, edit_log=edit_log, with_photo=with_photo, start=1)