You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用python-telegram-bot将用户消息转发至Telegram群组?

解决python-telegram-bot转发用户消息到Telegram群组的问题

首先,先帮你指出现有代码里的几个小问题:

  • send_message 函数缺了闭合的括号,语法会直接报错
  • forward_message 的参数填错了:chat_id 需要是目标群组的数字ID(不能写群组名称),from_chat_id 应该是用户发送消息的聊天ID(也就是用户和bot对话的那个聊天窗口ID),message_id 是用户那条消息的专属ID

接下来一步步实现你要的功能:转发用户的消息到指定群组,同时把回复内容发送到群组里。

第一步:获取目标群组的chat_id

Telegram的群组/超级群组不能直接用名称作为chat_id,必须用数字ID。获取方法很简单:

  1. 把你的bot加入目标群组
  2. 在群组里随便发一条消息
  3. 写个临时handler打印update.message.chat_id,或者用Telegram的@getidsbot来获取(把这个bot拉进群组,它会自动返回群组ID)
    • 注意:群组ID一般是负数格式,比如 -1001234567890

第二步:修正并完善代码

如果你用的是python-telegram-bot v12及旧版本(同步写法)

# 先替换成你自己的群组ID和bot token
GROUP_CHAT_ID = -1001234567890
BOT_TOKEN = "你的bot token"

def feed(bot, update):
    # 获取用户发送的消息对象
    user_msg = update.message
    
    # 转发用户的消息到目标群组
    bot.forward_message(
        chat_id=GROUP_CHAT_ID,
        from_chat_id=user_msg.chat_id,  # 用户和bot对话的聊天窗口ID
        message_id=user_msg.message_id  # 用户那条消息的专属ID,确保转发内容准确
    )
    
    # 在目标群组发送回复内容
    bot.send_message(
        chat_id=GROUP_CHAT_ID,
        text="reply this message"
    )

# 注册handler并启动bot(完整示例)
from telegram.ext import Updater, MessageHandler, Filters

updater = Updater(token=BOT_TOKEN, use_context=False)
dispatcher = updater.dispatcher
# 监听所有非命令的文本消息,触发feed函数
dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, feed))

updater.start_polling()
updater.idle()

如果你用的是python-telegram-bot v20+版本(异步写法,官方推荐)

新版本改用Application和异步函数,写法如下:

from telegram import Update
from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes

# 替换成你的信息
GROUP_CHAT_ID = -1001234567890
BOT_TOKEN = "你的bot token"

async def feed(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_msg = update.message
    
    # 转发用户消息到群组
    await context.bot.forward_message(
        chat_id=GROUP_CHAT_ID,
        from_chat_id=user_msg.chat_id,
        message_id=user_msg.message_id
    )
    
    # 在群组发送回复
    await context.bot.send_message(
        chat_id=GROUP_CHAT_ID,
        text="reply this message"
    )

def main():
    application = ApplicationBuilder().token(BOT_TOKEN).build()
    # 监听所有非命令的文本消息
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, feed))
    application.run_polling()

if __name__ == '__main__':
    main()

关键注意事项

  • 确保你的bot已经加入目标群组,并且拥有发送消息转发消息的权限(在群组权限设置里要开启对应权限)
  • 不要用群组的用户名(比如@mygroup)作为chat_id,必须用获取到的数字ID
  • 如果用户发送的是图片、文件等非文本消息,需要调整Filters(比如Filters.photo)来匹配对应的消息类型

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

火山引擎 最新活动