如何用Telethon事件检测Telegram群组中是否有人@我?
在Telethon中实现群组@提及检测
对应你Pyrogram的需求,Telethon可以通过事件过滤+自定义判断实现相同功能,以下是完整代码示例:
from telethon import TelegramClient, events, ChatType # 初始化客户端(替换成你的API信息) client = TelegramClient('session_name', api_id=12345, api_hash='your_api_hash') # 获取当前登录用户信息,用于后续判断是否被提及 me = client.loop.run_until_complete(client.get_me()) @client.on(events.NewMessage( # 过滤群组/超级群组消息,对应Pyrogram的filters.group chat_type=(ChatType.GROUP, ChatType.SUPERGROUP), # 自定义过滤:检查消息中是否提及了自己,对应Pyrogram的filters.mentioned func=lambda e: me.id in [user.id for user in e.message.mentioned_users] )) async def on_mentioned(event): # 这里写你的响应逻辑,比如调用处理函数 do_response(event.message) def do_response(message): # 示例:打印被提及的消息内容(根据你的需求修改) print(f"有人在群组@我了:{message.text}") with client: client.run_until_disconnected()
关键部分说明:
- 群组过滤:通过
chat_type=(ChatType.GROUP, ChatType.SUPERGROUP)直接限定只处理群组/超级群组消息,和Pyrogram的filters.group效果一致。 - 提及检测:利用
message.mentioned_users获取消息中被@的用户列表,检查自己的ID是否在列表内,实现和filters.mentioned相同的检测逻辑。 - 异步处理:Telethon的事件处理函数必须是
async异步函数,这和Pyrogram的同步/异步兼容不同,注意保持代码风格一致。
如果你的do_response函数是为Pyrogram编写的,需要注意适配Telethon的Message对象结构(比如获取聊天ID用message.chat_id,发送消息用await client.send_message(...))。
内容的提问来源于stack exchange,提问作者Hussein Shakir
相关产品推荐
相关产品推荐

