如何使用 telethon 获取特定私人频道的更新?
How can I get updates for a specific private channel using telethon?
我想 "read" 来自私人的消息 Telegram-channel 我已经加入 phone 但不知道如何在代码中指定它。
我已经写了一些代码,我在其中创建了一个电报客户端(使用我的 phone 号码登录),每次消息包含关键字时 "does something"(关键字:Ascending/Descending - 代码下面)。
问题:
它仅在我向我的机器人、我保存的消息或我的联系人之一发送消息(使用与 API 相同的 phonennumber)时触发。
但是如果我将消息发送到我的测试频道(我是管理员),什么也不会发生。
主频道中的一条消息也没有任何作用(我不是管理员)。
我不确定如何使用:
@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
- 转到https://web.telegram.org
- 点击您的频道
- 查看URL,找到看起来像c12112121212_17878787878787878
的部分
- 去掉c12112121212后的下划线
- 去掉前缀字母12112121212
- 前缀为 -100 所以 -10012112121212 那是你的
频道编号。
获取频道用户名
- 转到https://web.telegram.org
- 点击您的频道
- 查看 URL 并找到看起来像 im?p=@MyChannelName
的部分
- 去掉前缀
im?p=@
- 这是您的频道 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**
我想 "read" 来自私人的消息 Telegram-channel 我已经加入 phone 但不知道如何在代码中指定它。
我已经写了一些代码,我在其中创建了一个电报客户端(使用我的 phone 号码登录),每次消息包含关键字时 "does something"(关键字:Ascending/Descending - 代码下面)。
问题:
它仅在我向我的机器人、我保存的消息或我的联系人之一发送消息(使用与 API 相同的 phonennumber)时触发。
但是如果我将消息发送到我的测试频道(我是管理员),什么也不会发生。 主频道中的一条消息也没有任何作用(我不是管理员)。
我不确定如何使用:
@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
- 转到https://web.telegram.org
- 点击您的频道
- 查看URL,找到看起来像c12112121212_17878787878787878 的部分
- 去掉c12112121212后的下划线
- 去掉前缀字母12112121212
- 前缀为 -100 所以 -10012112121212 那是你的 频道编号。
获取频道用户名
- 转到https://web.telegram.org
- 点击您的频道
- 查看 URL 并找到看起来像 im?p=@MyChannelName 的部分
- 去掉前缀
im?p=@
- 这是您的频道 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**