from pyrogram import Client, filters from pyrogram.types import ( Message, Chat, InlineQuery, InlineQueryResultArticle, InputTextMessageContent, InlineKeyboardMarkup, InlineKeyboardButton, ChosenInlineResult, CallbackQuery, ) from pyrogram.utils import unpack_inline_message_id from init import bot geo_dic = { "1": "美国-佛罗里达州-迈阿密", "2": "荷兰-阿姆斯特丹", "3": "美国-佛罗里达州-迈阿密", "4": "荷兰-阿姆斯特丹", "5": "新加坡", } def mention_chat(chat: Chat) -> str: return ( f'{chat.title}' if chat.username else chat.title ) def get_dc(message: Message): dc = 0 mention = "他" if message.reply_to_message: if message.reply_to_message.sender_chat: mention = mention_chat(message.reply_to_message.sender_chat) dc = message.reply_to_message.sender_chat.dc_id elif message.reply_to_message.from_user: mention = message.reply_to_message.from_user.mention dc = message.reply_to_message.from_user.dc_id elif message.from_user: mention = message.from_user.mention dc = message.from_user.dc_id elif message.sender_chat: mention = mention_chat(message.sender_chat) dc = message.sender_chat.dc_id return dc, mention @bot.on_message(filters.incoming & filters.command(["dc", f"dc@{bot.me.username}"])) async def dc_command(_: Client, message: Message): dc, mention = get_dc(message) if dc: text = f"{mention}所在数据中心为: DC{dc}\n该数据中心位于 {geo_dic[str(dc)]}" else: text = f"{mention}需要先设置头像并且对我可见。" await message.reply(text) @bot.on_inline_query(filters.regex(r"^dc$")) async def dc_query(_: Client, inline_query: InlineQuery): results = [ InlineQueryResultArticle( title="查询 dc", input_message_content=InputTextMessageContent(message_text="加载中,请等待。。。"), reply_markup=InlineKeyboardMarkup( [[InlineKeyboardButton(text="重试", callback_data="dc")]] ), ) ] await inline_query.answer( results=results, switch_pm_text="发送后查询", switch_pm_parameter="start", cache_time=0, ) inline_query.stop_propagation() def get_dc_text(dc: int): return f"此会话所在数据中心为: DC{dc}\n" f"该数据中心位于 {geo_dic[str(dc)]}" @bot.on_chosen_inline_result() async def dc_choose_callback(_: Client, chosen_inline_result: ChosenInlineResult): if chosen_inline_result.query != "dc": chosen_inline_result.continue_propagation() mid = chosen_inline_result.inline_message_id if not mid: return unpacked = unpack_inline_message_id(mid) dc = unpacked.dc_id await bot.edit_inline_text(mid, get_dc_text(dc)) @bot.on_callback_query(filters.regex(r"^dc$")) async def dc_callback(_: Client, callback_query: CallbackQuery): mid = callback_query.inline_message_id if not mid: await callback_query.answer("数据错误", show_alert=True) callback_query.continue_propagation() unpacked = unpack_inline_message_id(mid) dc = unpacked.dc_id try: await callback_query.edit_message_text(get_dc_text(dc)) except Exception: await callback_query.answer("数据错误", show_alert=True)