如何实现Discord消息转发至Telegram?现有脚本故障求助
Discord消息转Telegram脚本问题及解决方案
原代码的常见问题
你的代码无法运行大概率是这几个原因:
- Telegram客户端初始化错误:
TelegramClient.connect()并非正确的登录方式,Telethon库需要用await client2.start()完成认证(首次运行会要求输入验证码),直接调用connect可能未完成登录流程,导致无法发送消息。 - 目标聊天标识错误:
send_message的第一个参数用"username"可能无法正确定位聊天对象,建议使用用户ID/聊天ID(数字格式),或者完整的@username格式,避免匹配失败。 - 未过滤自消息/机器人消息:如果Discord机器人自己发消息也触发
on_message,会导致循环转发,需要添加判断排除。
修正后的基础代码
from telethon import TelegramClient import discord # Discord客户端初始化(需正确配置Intents) client = discord.Client(intents=discord.Intents.all()) # Telegram客户端配置 api_id = 你的API_ID api_hash = "你的API_HASH" phone = "你的手机号" telegram_target = 123456789 # 目标用户/聊天的ID,或"@目标用户名" # 初始化Telegram客户端 client2 = TelegramClient(phone, api_id, api_hash, flood_sleep_threshold=3) @client.event async def on_ready(): print(f"Discord机器人已登录:{client.user}") # 在Discord机器人就绪后启动Telegram客户端 await client2.start() print("Telegram客户端已登录") @client.event async def on_message(message): # 排除机器人自身消息,避免循环 if message.author == client.user: return # 转发消息到Telegram try: await client2.send_message(telegram_target, message.content) except Exception as e: print(f"发送Telegram消息失败:{e}") # 运行Discord客户端 client.run("你的Discord机器人TOKEN")
在其他Discord事件中发送Telegram消息
完全可以在任意Discord事件回调中调用Telegram的发送方法,只要确保Telegram客户端已经完成登录。举几个实用例子:
1. 新成员加入时发送通知到Telegram
@client.event async def on_member_join(member): welcome_msg = f"新成员 {member.name}(ID:{member.id})加入了服务器!" try: await client2.send_message(telegram_target, welcome_msg) except Exception as e: print(f"发送新成员通知失败:{e}")
2. 消息编辑时转发更新内容到Telegram
@client.event async def on_message_edit(before, after): if before.author == client.user: return edit_msg = f"用户 {before.author.name} 编辑了消息:\n原内容:{before.content}\n新内容:{after.content}" try: await client2.send_message(telegram_target, edit_msg) except Exception as e: print(f"发送编辑消息通知失败:{e}")
注意事项
- 确保Telethon库和discord.py库使用最新稳定版,避免版本兼容问题。
- Telegram的API_ID和API_HASH需要从Telegram开发者平台获取。
- Discord机器人需要在开发者后台开启对应的Intents(比如消息内容Intent、成员Intent),否则无法触发相关事件。
内容的提问来源于stack exchange,提问作者bicosos346
相关产品推荐
相关产品推荐

