def forward_evidence(client: Client, message: Message, level: str, more: str = None) -> Optional[Union[bool, Message]]: # Forward the message to logging channel as evidence result = None try: if not message or not message.from_user: return result # 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(lang('rule_admin'))}\n") # Additional information if message.game: text += f"{lang('message_type')}{lang('colon')}{code(lang('gam'))}\n" elif message.service: text += f"{lang('message_type')}{lang('colon')}{code(lang('ser'))}\n" if message.game: text += f"{lang('message_game')}{lang('colon')}{code(message.game.short_name)}\n" if message.from_user.is_self: if message.from_user.is_self is True: if message.entities: for en in message.entities: if not en.user: continue name = get_full_name(en.user) if not name: continue text += f"{lang('user_name')}{lang('colon')}{code(name)}\n" break text += f"{lang('more')}{lang('colon')}{code(lang('from_self'))}\n" # User didn't use report function wisely, should not forward evidence else: text += f"{lang('more')}{lang('colon')}{code(message.from_user.is_self)}" result = send_message(client, glovar.warn_channel_id, text) return result name = get_full_name(message.from_user) if name: text += f"{lang('user_name')}{lang('colon')}{code(name)}\n" if message.service and level == lang("action_ban"): bio = get_user_bio(client, uid) if bio: text += f"{lang('user_bio')}{lang('colon')}{code(bio)}\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 or message.service: 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 or message.service): result = send_message(client, glovar.warn_channel_id, text) return result flood_wait = True while flood_wait: flood_wait = False try: result = message.forward(chat_id=glovar.warn_channel_id, disable_notification=True) except FloodWait as e: flood_wait = True wait_flood(e) 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, glovar.warn_channel_id, text, result) except Exception as e: logger.warning(f"Forward evidence error: {e}", exc_info=True) return result
def forward_evidence(client: Client, message: Message, user: User, level: str, rule: str, more: str = None, general: bool = True) -> Optional[Union[bool, Message]]: # Forward the message to the logging channel as evidence result = None try: # Basic information uid = 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") if message.game: text += f"{lang('message_type')}{lang('colon')}{code(lang('gam'))}\n" elif message.service: text += f"{lang('message_type')}{lang('colon')}{code(lang('ser'))}\n" 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 or message.service: text += f"{lang('more')}{lang('colon')}{code(lang('cannot_forward'))}\n" elif more: text += f"{lang('more')}{lang('colon')}{code(more)}\n" # TODO if message.service or not general: channel_id = glovar.user_channel_id else: channel_id = glovar.logging_channel_id if not glovar.user_channel_id: channel_id = glovar.logging_channel_id # 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 or message.service): result = send_message(client, channel_id, text) return result flood_wait = True while flood_wait: flood_wait = False try: result = message.forward(chat_id=channel_id, disable_notification=True) except FloodWait as e: flood_wait = True wait_flood(e) except Exception as e: logger.warning(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