如何使用Telethon向Telegram公共频道已发布消息发送关联回复
可以实现,Telethon的send_message方法自带reply_to参数,传入目标原消息的ID即可让发送的消息自动关联挂载到原帖下方。
你现有代码已经拿到了要回复的原消息ID,只需要在调用send_message时补充传入reply_to参数即可生效。
代码修改点
你现有messages函数中调用send_message的逻辑没有使用传入的原消息ID参数,修改对应行即可:
# 原代码 client.send_message(entity, message_content) # 修改为 client.send_message(entity, message_content, reply_to=destination_channel_id)
优化后的完整可运行代码
from telethon.sync import TelegramClient def send_reply_to_channel_msg(api_id, api_hash, phone, channel_name, message_content, reply_to_msg_id): # 使用with上下文自动管理连接断开,无需手动调用connect/disconnect with TelegramClient(phone, api_id, api_hash) as client: if not client.is_user_authorized(): client.send_code_request(phone) client.sign_in(phone, input('Enter the code: ')) entity = client.get_entity(channel_name) # 传入reply_to参数指定要回复的原消息ID client.send_message(entity, message_content, reply_to=reply_to_msg_id) def get_my_last_channel_msg(api_id, api_hash, phone, chat): with TelegramClient(phone, api_id, api_hash) as client: if not client.is_user_authorized(): client.send_code_request(phone) client.sign_in(phone, input('Enter the code: ')) for message in client.iter_messages(chat, from_user='me', reverse=True): return message # 没有匹配消息时返回None return None if __name__ == "__main__": # 替换为你自己的实际参数 api_id = 123456 # 你的api_id,为数字类型 api_hash = "你的api_hash字符串" phone = "+8613xxxxxxxxx" # 带国际区号的手机号 chat = "目标频道用户名/ID" last_message = get_my_last_channel_msg(api_id, api_hash, phone, chat) if last_message: print(f"ID {last_message.id} - {last_message.message}") send_reply_to_channel_msg(api_id, api_hash, phone, chat, 'Thank you', last_message.id)
注意事项
- 你使用的账号需要具备目标频道的发言权限,否则会发送失败
- 若目标为私有频道,需要先让账号加入频道才能正常拉取消息和发送回复
- 原消息如果被删除、或者频道设置了禁止普通用户回复,回复操作也会失败
内容的提问来源于stack exchange,提问作者John Steele
相关产品推荐
相关产品推荐

