def new_roadblock(bot: Bot, message: Message) -> None: if banned(message.from_user) or message.chat_id == roads_chat \ or spam(message): return user_id = message.from_user.id with db_session: U.get(user_id=user_id).roadblocks_count += 1 user = bot.get_chat_member(mods_chat, user_id) if user['status'] in ('creator', 'administrator', 'member'): bypass_moderators(bot, message) return message.reply_text(BOT_MSG_ACCEPT.format(message.from_user.name)) msg = BOT_REQUEST_CHECK.format(message.from_user.name) mods_message = bot.send_message(mods_chat, msg, reply_markup=mods_keyboard) message.forward(mods_chat) with db_session: Roadblock(author=message.from_user.id, chat_id=message.chat_id, chat_message_id=message.message_id, mods_message_id=mods_message.message_id)
def forward_evidence(client: Bot, message: Message, level: str, rule: str, length: int, score: float = 0.0, more: str = None, general: bool = True) -> Optional[Union[bool, Message]]: # Forward the message to the logging channel as evidence result = None try: # Get channel id channel_id = glovar.logging_channel_id if general else glovar.long_channel_id if not glovar.long_channel_id: channel_id = glovar.logging_channel_id # Basic information uid = message.from_user.id text = (f"{lang('project')}{lang('colon')}{code(glovar.sender)}\n" f"{lang('user_id')}{lang('colon')}{code(uid)}\n" f"{lang('level')}{lang('colon')}{code(level)}\n" f"{lang('rule')}{lang('colon')}{code(rule)}\n") # Additional information if length: text += f"{lang('message_len')}{lang('colon')}{code(length)}\n" if message.game: text += f"{lang('message_type')}{lang('colon')}{code(lang('gam'))}\n" if message.game: text += f"{lang('message_game')}{lang('colon')}{code(message.game.short_name)}\n" if lang("score") in rule: text += f"{lang('user_score')}{lang('colon')}{code(f'{score:.1f}')}\n" if lang("name") in rule: name = get_full_name(message.from_user) if name: text += f"{lang('user_name')}{lang('colon')}{code(name)}\n" forward_name = get_forward_name(message) if forward_name and forward_name != name: text += f"{lang('from_name')}{lang('colon')}{code(forward_name)}\n" # Extra information if message.contact or message.location or message.venue or message.video_note or message.voice: text += f"{lang('more')}{lang('colon')}{code(lang('privacy'))}\n" elif message.game: text += f"{lang('more')}{lang('colon')}{code(lang('cannot_forward'))}\n" elif more: text += f"{lang('more')}{lang('colon')}{code(more)}\n" # DO NOT try to forward these types of message if (message.contact or message.location or message.venue or message.video_note or message.voice or message.game): result = send_message(client, channel_id, text) return result try: result = message.forward(chat_id=channel_id, disable_notification=True) except Exception as e: logger.info(f"Forward evidence message error: {e}", exc_info=True) return False result = result.message_id result = send_message(client, channel_id, text, result) except Exception as e: logger.warning(f"Forward evidence error: {e}", exc_info=True) return result
def send_message(message: Message, chat_id: int) -> Union[MessageId, Message]: if REMOVE_TAG: return message.copy(chat_id) return message.forward(chat_id)