如何使用 telethon 获取特定私人频道的更新?

How can I get updates for a specific private channel using telethon?

我想 "read" 来自私人的消息 Telegram-channel 我已经加入 phone 但不知道如何在代码中指定它。


我已经写了一些代码,我在其中创建了一个电报客户端(使用我的 phone 号码登录),每次消息包含关键字时 "does something"(关键字:Ascending/Descending - 代码下面)。

问题:

它仅在我向我的机器人、我保存的消息或我的联系人之一发送消息(使用与 API 相同的 phonennumber)时触发。

但是如果我将消息发送到我的测试频道(我是管理员),什么也不会发生。 主频道中的一条消息也没有任何作用(我不是管理员)。


我已经检查过:https://telethonn.readthedocs.io/en/latest/extra/basic/working-with-updates.html?highlight=events.NewMessage(chats#id5

我不确定如何使用:

@client.on(events.NewMessage(聊天=('insert something')))

因为我不知道我需要插入什么。

已经尝试过在每条消息中将群组名称显示为 header 但什么都没有 happens/prints。


from telethon import TelegramClient, events, utils

# Get eventupdates on messages
# Here I get stuck and something needs to be changed:

@client.on(events.NewMessage)  
async def handler(event):

#If keyword is in message -> do something

    if "Descending" in event.raw_text:
        print( 'Alert with ', event.text, '!')
    if "Ascending" in event.raw_text:
        print( 'Alert with ', event.text, '!')


我希望该事件仅由特定组触发,但目前它是由发送到我的 bot/contacts/saved 消息的消息触发的,但 channel-message.

什么都不做

events.NewMessage(chats=chat)

它需要频道用户名、ID 或邀请 link。但是,邀请 link 不可靠,因为它们可能会发生变化。

示例:

from telethon import TelegramClient, events

client = TelegramClient('session', api_id, api_hash)

@client.on(events.NewMessage(chats="@TelethonUpdates"))
async def my_event_handler(event):
    print(event.text)

client.start()
client.run_until_disconnected()

或者你可以这样做:

sourceChannelsID=[-xxxxxxxxxxx,-xxxxxxxxxxx,...]

@client.on(events.NewMessage(outgoing=False))
async def my_event_handler(event):
    if event.chat_id in sourceChannelsID:
        Do something...

万一有人像我一样来寻找从多个渠道获取更新的方法

myChannelIDList = [xxxxxxxxxxx,xxxxxxxxxxx,myChannelName,...]

@client.on(events.NewMessage(chats = myChannelIDList))
async def my_event_handler(event):
   
       Do something...

只需将所有频道的列表添加为聊天就足够了。该列表可以包含频道 ID、邀请链接或频道用户名(输入的任意组合)。

获取频道ID

  1. 转到https://web.telegram.org
  2. 点击您的频道
  3. 查看URL,找到看起来像c12112121212_17878787878787878
  4. 的部分
  5. 去掉c12112121212后的下划线
  6. 去掉前缀字母12112121212
  7. 前缀为 -100 所以 -10012112121212 那是你的 频道编号。

获取频道用户名

  1. 转到https://web.telegram.org
  2. 点击您的频道
  3. 查看 URL 并找到看起来像 im?p=@MyChannelName
  4. 的部分
  5. 去掉前缀im?p=@
  6. 这是您的频道 ID。 MyChannelName

示例:

https://web.telegram.org/#/im?p=c**12112121212**_17878787878787878 
https://web.telegram.org/#/im?p=s**12112121212**_17878787878787878 
https://web.telegram.org/#/im?p=u**12112121212**_17878787878787878 
https://web.telegram.org/#/im?p=@**MyChannelName**