[英]How can I get updates for a specific private channel using telethon?
我想从我的手机已经加入的私人电报频道“阅读”一条消息,但不知道如何在代码中指定它。
我已经编写了一些代码,在其中创建了一个 Telegram 客户端(使用我的电话号码登录),每当消息包含关键字(关键字:升序/降序 - 代码如下)时,它都会“做某事”。
问题:
它仅在我将消息(使用与 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, '!')
我希望该事件仅由特定组触发,但目前它由发送给我的机器人/联系人/已保存消息的消息触发,但通道消息不执行任何操作。
events.NewMessage(chats=chat)
它需要一个频道用户名、ID 或邀请链接。 但是,邀请链接不可靠,因为它们可能会发生变化。
例子:
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()
如果像我这样的人来寻找一种从多个渠道获取更新的方法,
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**
或者你可以这样做:
sourceChannelsID=[-xxxxxxxxxxx,-xxxxxxxxxxx,...]
@client.on(events.NewMessage(outgoing=False))
async def my_event_handler(event):
if event.chat_id in sourceChannelsID:
Do something...
更新新的 Telegram Web 界面和telethon==1.24.0
不再可能从网站获取频道 ID。 相反,您可以从新网站检索对等 ID,并使用它为您的频道检索正确的实体。
chatlist-chat rp active
<li class="chatlist-chat rp active" data-peer-id="-23456272">
记下data-peer-id
- 在本例中为-23456272
data-peer-id
获取正确的PeerChannel
实体,并使用下面的代码使用它来读取消息。import asyncio
from telethon import TelegramClient
from telethon.tl.types import PeerChannel
# These example values won't work. You must get your own api_id and
# api_hash from https://my.telegram.org, under API Development.
api_id = 87654321
api_hash = 'your-app-hash'
peer_channel_id = -23456272 # replace with channel peer
async with TelegramClient('anon', api_id, api_hash) as client:
my_channel = await client.get_entity(PeerChannel(peer_channel_id))
async for message in client.iter_messages(my_channel, limit=10):
print(message.sender_id, ':', message.text)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.