You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram机器人群成员解析报错修复:协程未等待问题解决

修复Telegram群成员@机器人代码及成员解析方法

错误原因

你使用的pyTelegramBotAPI(telebot库)默认message_handler装饰器不支持直接运行异步函数,即便你在函数内用了await,框架也不会主动等待协程执行,因此抛出了协程未被await的警告。

修复后的代码

import asyncio
from telethon.sync import TelegramClient
from telebot.async_telebot import AsyncTeleBot

# 替换为你的机器人Token
bot = AsyncTeleBot('YOUR_BOT_TOKEN')

# 替换为你的Telegram API信息
api_id = YOUR_API_ID  # 此处为数字,无需加引号
api_hash = 'YOUR_API_HASH'
phone = 'YOUR_PHONE_NUMBER'

# 初始化Telethon客户端
client = TelegramClient(phone, api_id, api_hash)

@bot.message_handler(commands=['all'])
async def mention_all(message):
    # 获取当前聊天ID(用ID而非标题,避免群名重复问题)
    chat_id = message.chat.id
    # 获取群内所有成员,limit=None表示获取全部
    participants = await client.get_participants(chat_id, limit=None)
    
    # 拼接可@的成员内容
    mention_list = []
    for user in participants:
        # 优先使用用户名生成可点击的@格式,无用户名则用昵称
        if user.username:
            mention_list.append(f"@{user.username}")
        elif user.first_name:
            mention_list.append(user.first_name)
    
    # 发送@成员消息
    await bot.send_message(chat_id, ' '.join(mention_list))

async def main():
    await client.start()
    await bot.polling(none_stop=True)

if __name__ == '__main__':
    asyncio.run(main())

成员解析说明

  1. 获取成员列表:client.get_participants(chat_id, limit=None)会返回群内所有成员的User对象列表,limit=None参数确保获取全部成员(默认仅返回前100个)。
  2. 提取成员信息:每个User对象包含以下常用字段:
    • username:用户的Telegram用户名(可直接生成@格式)
    • first_name:用户的昵称
    • last_name:用户的姓氏
    • id:用户的唯一标识ID
  3. 生成可@内容:优先使用username生成@用户名格式(支持点击跳转),若用户未设置用户名,则用first_name替代。

注意事项:

  • 确保机器人已加入目标群聊,且拥有读取成员列表的权限
  • 替换代码中所有大写占位符为你的实际信息
  • 批量@成员可能触发Telegram限制,建议控制发送频率或分批次发送

内容的提问来源于stack exchange,提问作者user23346576

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 15:22:43