我想从私人电报频道“阅读”一条消息,我的电话已经加入了该消息,但是我不知道如何在代码中指定消息。
我已经写了一些代码,用来创建一个Telegram Client(使用我的电话号码登录),每当消息包含关键字(关键字:Ascending / Descending-下面的代码)时,该客户端都会“执行某些操作”。
问题:
仅在我将消息(与API的电话号相同)写入我的机器人,保存的消息或我的联系人之一时触发。
但是,如果我将邮件发送到测试频道(我是管理员),则什么也不会发生。 同样,主频道中的消息也无济于事(我不是管理员)。
我不确定如何使用:
@ 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, '!')
我希望该事件仅由特定的组触发,但此刻它是由发给我的漫游器/联系人/已保存消息的消息触发的,但不由频道消息引起的。
答案 0 :(得分:2)
如果像我这样的人来寻找从多个渠道获取更新的方法,
myChannelIDList = [xxxxxxxxxxx,xxxxxxxxxxx,myChannelName,...]
@client.on(events.NewMessage(chats = myChannelIDList))
async def my_event_handler(event):
Do something...
只需将所有频道的列表添加为聊天就足够了。该列表可以包含频道 ID、邀请链接或频道用户名(输入的任意组合)。
获取频道 ID
获取频道用户名
im?p=@
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...