如何将Telegram机器人添加到非本人拥有的频道?
Telegram机器人无法添加到非本人频道的解决方案
问题描述
我开发了一款Telegram机器人,可抓取频道帖子并翻译后发送至另一频道。目前该机器人在我自己的两个频道可正常运行,但无法将其添加到非本人拥有的频道,尝试了所有已知方法仍未找到解决方案。
实现代码
from aiogram import executor, types, Dispatcher, Bot import logging from translate import Translator import data logging.basicConfig(level=logging.INFO) bot = Bot(token= data.TOKEN) dp = Dispatcher(bot) @dp.channel_post_handler(content_types= ['text', 'photo']) async def take_msg(msg: types.Message): try: text = msg.text translator = Translator(to_lang='en', from_lang= 'autodetect') translation = translator.translate(text) if data.idd != str(msg.chat.id): await bot.send_message(chat_id= data.idd, text= translation) except: if data.idd != str(msg.chat.id): await bot.send_photo(data.idd, msg.photo[0].file_id) if __name__ == '__main__': executor.start_polling(dp, skip_updates= False)
(注:代码中if name == '__main__'存在语法错误,已修正为if __name__ == '__main__')
解决步骤
调整机器人隐私设置
发送/setprivacy给@BotFather,选择你的机器人,将Group Privacy设置为Disable。关闭隐私模式后,机器人才能接收非私有频道的消息。确认添加权限与流程
- 必须由目标频道的管理员(拥有「管理频道」权限)操作添加,普通成员无法添加机器人。
- 添加时进入频道「管理员」设置页面,搜索机器人用户名,添加后分配至少「查看消息」和「发送消息」权限;如果需要处理媒体内容,额外勾选「上传照片/视频」等对应权限。
代码优化建议
- 替换宽泛的异常捕获,改为捕获具体异常,便于排查问题:
except AttributeError: # 处理无text属性的消息(如仅图片) if data.idd != str(msg.chat.id): await bot.send_photo(data.idd, msg.photo[0].file_id) - 当前代码硬编码了目标频道ID(
data.idd),若要支持多场景转发,可添加命令让用户绑定目标频道,避免固定单一ID。 - 确保
data.idd为字符串类型的频道ID(频道ID通常以-100开头),避免类型不匹配导致的逻辑错误。
- 替换宽泛的异常捕获,改为捕获具体异常,便于排查问题:
Telegram规则限制
机器人无法主动申请加入频道,必须由频道管理员手动添加;若目标频道为私有频道,需先将机器人添加为频道成员,再提升为管理员。
内容的提问来源于stack exchange,提问作者Сергій Кучинський
相关产品推荐
相关产品推荐

