首页 > 编程问答 >尽管 chat_id 正确,但私人频道的 Pyrogram Peer_ID 无效错误

尽管 chat_id 正确,但私人频道的 Pyrogram Peer_ID 无效错误

时间:2024-07-27 15:55:32浏览次数:7  
标签:python telegram pyrogram

我的 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}")

在这段代码中:

  1. 我们使用你的凭据创建了一个 Client 对象。
  2. 我们使用 app.get_chat() 方法获取聊天对象。这需要聊天用户名或 ID。
  3. 从返回的 chat 对象中,我们访问 chat.id 属性,该属性提供正确的 peer ID,无论它是旧的还是新的私有频道/群组。
  4. 最后,我们使用正确的 chat_peer_id 向频道发送消息。

通过这种方法,你不必担心 peer ID 的内部表示,Pyrogram 会为你处理它。确保将占位符替换为你自己的凭据和频道信息。

此外,无需切换到 Pyrofork,因为 Pyrogram 完全能够处理这个问题。如果 Pyrofork 给你带来问题,最好先解决与 Pyrogram 相关的问题。

标签:python,telegram,pyrogram
From: 78800845

相关文章

  • 获取 Python Decimal 的精确十进制字符串表示形式?
    如果我有一个PythonDecimal,我怎样才能可靠地获得数字的精确十进制字符串(即不是科学记数法)表示而不带尾随零?例如,如果我有:>>>d=Decimal('1e-14')我会像:>>>get_decimal_string(d)'0.00000000000001'但是:Decimal类没有任何to_......
  • python datetime timedelta 对于没有小数部分的时间返回 0.0
    我正在使用datetime.timedelta来获取python中进程的持续时间。defget_time_difference(start_time,end_time):time_in_seconds=(end_time-start_time)returnstr(datetime.timedelta(seconds=time_in_seconds))[:-3]文档指出“所有参数都是可选的......
  • 如何运行从我正在编写的另一个 Python 脚本获取命令行参数的 Python 脚本?
    我有一个python3脚本,如下所示:...defmain():parser=argparse.ArgumentParser(description='Performnormalisationchecksonpass2files')parser.add_argument('-p','--parser',action='store',help='parse......
  • Python 抓取 urllib2 HTTP 错误
    我正在尝试抓取一个网站,但我的代码仅在我打开该网站然后刷新它时才有效。我尝试了多种方法,但不断出现以下两个错误:第一个:ValueError:“HTTPError:HTTP错误416:请求的范围无法满足”urlslist=open("list_urls.txt").read()urlslist=urlslist.split("\n")forurlslistinurl......
  • 【Python】利用 face_recognition 库进行人脸检测识别【附完整示例】
    1.背景条件1.1安装所需库首先安装face_recognition和Pillow这两个库。您可以使用以下命令来安装它们:pipinstallface_recognitionPillow-ihttps://pypi.tuna.tsinghua.edu.cn/simple1.2拷贝代码安装完成后,您就可以在本地运行以下提供的代码了。importfac......
  • 太强了,Python+Excel真的是神仙组合!
    本书是由流行开源Python库xlwings的创始人:费利克斯·朱姆斯坦(FelixZumstein)所撰写。他详细阐述了如何将Python与Excel结合使用,让任务自动化,从而实现效率飞跃。为了帮助初学者克服对Python的恐惧,作者特意将教程内容设计成从简单到复杂的顺序进行介绍。这本书PDF共282页,分为4个......
  • 在 Python 中获取精确的 Android GPS 位置
    我尝试在Python中获取Android手机的GPS位置(使用QPython3应用程序)。这种可行,但是Android中似乎有几个LocationProvider:gps:纯gps定位,速度慢,耗能,但非常准确,正是我所需要的。网络:GPS和wifi/小区定位的混合,更快,但不太准确被动......
  • 使用 docker run 将 Python 单击选项传递给 ENTRYPOINT 会出现错误:“在 $PATH 中找不
    我有一个简单的python脚本,我想在docker容器内运行它。它打印一行消息“Hello{name}”。python脚本使用clickCLI界面来定义收件人名称,如果我直接运行它(不使用dockerrun命令),它将如下所示:pythonhello.py-nSmithDockerbuild命令:dockerbuild.-thello:1.......
  • 标题:在 OpenSees Python 中定义具有特定卸载行为的双线性弹塑性材料
    我正在使用Python中的OpenSees,我想定义一种在负载下表现出双线性弹塑性行为的材料。但是,我需要在卸载过程中将材质返回到其原始位置,遵循准确的加载路径。在此处输入图像描述我不确定如何在OpenSees中正确实现卸载行为,我正在寻找实现这一具体材料反应的指导。......
  • 使用正则表达式删除Python中常见的公司名称后缀
    我正在努力删除一些公司名称中的后缀。预期结果如下:原始名称:AppleInc.SonyCorporationFiatChryslerAutomobilesS.p.A.SamsungElectronicsCo.,Ltd.清除名称:AppleSonyFiatChryslerAutomobilesSamsungElectronics到目前为止我所做的:importred......