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

时间:2019-09-04 00:41:23

标签: python telegram telethon

我想从私人电报频道“阅读”一条消息,我的电话已经加入了该消息,但是我不知道如何在代码中指定消息。


我已经写了一些代码,用来创建一个Telegram Client(使用我的电话号码登录),每当消息包含关键字(关键字:Ascending / Descending-下面的代码)时,该客户端都会“执行某些操作”。

问题:

仅在我将消息(与API的电话号相同)写入我的机器人,保存的消息或我的联系人之一时触发。

但是,如果我将邮件发送到测试频道(我是管理员),则什么也不会发生。 同样,主频道中的消息也无济于事(我不是管理员)。


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

我不确定如何使用:

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

由于我不知道需要插入什么内容。

已经尝试过,组名显示为每条消息的标题,但没有任何反应/打印。


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, '!')


我希望该事件仅由特定的组触发,但此刻它是由发给我的漫游器/联系人/已保存消息的消息触发的,但不由频道消息引起的。

3 个答案:

答案 0 :(得分:2)

如果像我这样的人来寻找从多个渠道获取更新的方法,

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. 查看网址,找到看起来像c的部分12112121212_17878787878787878
  4. 去掉c12112121212之后的下划线
  5. 删除前缀字母 12112121212
  6. 前缀 -100 所以 -10012112121212 那是你的 频道 ID。

获取频道用户名

  1. 转到https://web.telegram.org
  2. 点击您的频道
  3. 查看 URL 并找到类似于 im?p=@MyChannelName 的部分
  4. 去掉前缀 im?p=@
  5. 这是您的频道 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**

答案 1 :(得分:1)

events.NewMessage(chats = chat)

需要一个频道用户名,ID或邀请链接。但是,邀请链接可能会更改,因此不可靠。

答案 2 :(得分:0)

或者您可以执行以下操作:

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

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