我的 Python 脚本遇到问题,该脚本使用 Pyrogram 与我所属的私人 Telegram 频道进行交互(从我的帐户执行特定操作的用户机器人 - 使用 my.telegram.org 中的 api_id/api_hash)。| ||我从 Telegram Web 的私有频道的 URL 中得出对等 ID(例如:
https://web.telegram.org/k/#-2200488212 )。它曾经可以很好地处理不久前创建的私人频道(我假设 telegram 已经为私人频道创建了更新),但 Pyrogram 无法使用最近创建的私人频道,特别是它说无效的对等 id。它确实可以与如下所示的对等 ID 配合使用:-10051622484 - 开头带有“-100”。最近的私人频道/群组的对等 ID 前没有“-100”,例如: -2200488212 。 我不知道这些是否有某种关联。也许我错了,但是相同的脚本在其他频道上运行得很好,但在这个频道上却遇到了麻烦。 如何解决这个问题?
我在 youtube 中查找了类似的问题
这里是视频| ||,一个人在他的代码中使用 Pyrofork 而不是 Pyrogram。 我尝试将 Pyrofork 安装到我的代码工作的虚拟环境中 - 没有帮助。卸载了pyrogram,只留下pyrofork - 遇到错误。 , a guy uses pyrofork instead of pyrogram in his code.
I tried to install the pyrofork into my virtual environment where my code works - did not help. Uninstalled the pyrogram and left only the pyrofork - encountered an error.
你遇到的问题是 Telegram 如何为私人群组和频道生成 peer ID。你观察到旧的私人群组和频道 ID 前面有
-100
,而新创建的则没有,这是对的。
这方面 Pyrogram 没有问题。问题在于你直接使用频道 ID 作为 peer ID。你应该使用
peer
对象或
input_peer
方法来获得正确的 peer ID。
以下是使用 Pyrogram 获取正确 peer ID 并向私有频道发送消息的方法:
from pyrogram import Client
# 你的 API ID 和哈希值
api_id = "YOUR_API_ID"
api_hash = "YOUR_API_HASH"
# 你的机器人令牌
bot_token = "YOUR_BOT_TOKEN"
# 私有频道/群组的用户名或 ID
chat_username_or_id = "-2200488212" # 用你的频道用户名或 ID 替换
app = Client("my_bot", api_id=api_id, api_hash=api_hash, bot_token=bot_token)
with app:
try:
# 通过用户名或 ID 获取聊天对象
chat = app.get_chat(chat_username_or_id)
# 从聊天对象获取 peer ID
chat_peer_id = chat.id
# 向频道发送消息
app.send_message(chat_peer_id, "Hello from Pyrogram!")
except Exception as e:
print(f"发生错误: {e}")
在这段代码中:
-
我们使用你的凭据创建了一个
Client
对象。 -
我们使用
app.get_chat()
方法获取聊天对象。这需要聊天用户名或 ID。 -
从返回的
chat
对象中,我们访问chat.id
属性,该属性提供正确的 peer ID,无论它是旧的还是新的私有频道/群组。 -
最后,我们使用正确的
chat_peer_id
向频道发送消息。
通过这种方法,你不必担心 peer ID 的内部表示,Pyrogram 会为你处理它。确保将占位符替换为你自己的凭据和频道信息。
此外,无需切换到 Pyrofork,因为 Pyrogram 完全能够处理这个问题。如果 Pyrofork 给你带来问题,最好先解决与 Pyrogram 相关的问题。
标签:python,telegram,pyrogram From: 78800845