Python 如何在telethon中处理从组到超级组的迁移?

Python 如何在telethon中处理从组到超级组的迁移?,python,python-3.x,telegram,telethon,Python,Python 3.x,Telegram,Telethon,我在telethon电报组问了这个问题,但没有得到充分的回答。 因此,我得到了支持迁移的“代码”: @client.on(events.Raw(types.UpdateNewChannelMessage)) 异步def migrate_事件(事件:types.UpdateNewChannelMessage): 如果是event.message: 如果isinstance(event.message.action,types.MessageActionChannelMigrateFrom): wa

我在telethon电报组问了这个问题,但没有得到充分的回答。 因此,我得到了支持迁移的“代码”:

@client.on(events.Raw(types.UpdateNewChannelMessage))
异步def migrate_事件(事件:types.UpdateNewChannelMessage):
如果是event.message:
如果isinstance(event.message.action,types.MessageActionChannelMigrateFrom):
was_chat_id=-1*event.message.action.chat_id
new_id=int('-100'+str(event.message.to_id.channel_id))
提出事件
但是,当我更改组权限或某些用户的权限(例如,将其转移到管理员权限)时,它不起作用。 我只是得到了这样的东西:

UpdateChatParticipants(参与者=聊天参与者(聊天id=496384744,参与者=[ChatParticipant(用户id=849120097,邀请者id=382775249,日期=datetime.datetime(2020,8,18,8,28,30,tzinfo=datetime.timezone.utc)),聊天参与者(用户id=1038400746,邀请者id=382775249,日期=datetime.datetime)(2020,8,18,8,28,30,tzinfo=datetime.timezone.utc)),ChatParticipantCreator(用户id=382775249)],版本=1)
收听原始事件时:

@client.on(events.Raw)
异步def迁移事件(事件):
打印(事件)
打印(事件、消息、操作)
我只是不明白,我认为这是因为旧的Telethon版本(1.12),因为新的Telethon版本正在进行层更改(所以其他定义在安装时内置在setup.py中),但我认为这是不同的问题。 我可能不知道如何正确地编写代码,我错过了一些知识


那么,您知道如何正确处理它吗?

建议的代码正在运行,您只需对这些值做一些处理

from telethon import TelegramClient, events, types
...
@client.on(events.Raw(types.UpdateNewChannelMessage))
async def migrate_event(event: types.UpdateNewChannelMessage):
    """
    event new incoming message, filtered by MessageActionChannelMigrateFrom

    :param param1: event is the message object, types type of  action
    """
    if event.message:
        if event.message.action is not None:
            print('=========== Chat Action  ===============')
            if isinstance(event.message.action, types.MessageActionChannelMigrateFrom):
                was_chat_id = -1 * event.message.action.chat_id
                new_id = int('-100' + str(event.message.to_id.channel_id))
                print('############ CHAT MIGRATION ############')
                print('From_id: ' + str(was_chat_id) + 'To_id: ' + str(new_id))
这应该在每个聊天事件上打印一条消息,检测迁移到超级组等,并打印新旧ID


要获得其他操作,您还必须对它们进行过滤和处理…

建议的代码正在运行,您只需对这些值执行一些操作

from telethon import TelegramClient, events, types
...
@client.on(events.Raw(types.UpdateNewChannelMessage))
async def migrate_event(event: types.UpdateNewChannelMessage):
    """
    event new incoming message, filtered by MessageActionChannelMigrateFrom

    :param param1: event is the message object, types type of  action
    """
    if event.message:
        if event.message.action is not None:
            print('=========== Chat Action  ===============')
            if isinstance(event.message.action, types.MessageActionChannelMigrateFrom):
                was_chat_id = -1 * event.message.action.chat_id
                new_id = int('-100' + str(event.message.to_id.channel_id))
                print('############ CHAT MIGRATION ############')
                print('From_id: ' + str(was_chat_id) + 'To_id: ' + str(new_id))
这应该在每个聊天事件上打印一条消息,检测迁移到超级组等,并打印新旧ID


要获得其他操作,您还必须使用
事件对其进行过滤和处理…

。Raw
目前是(v1.16.4)获取迁移更新的唯一方法,并且您正在正确地检查它们。如果用户升级时Telegram没有发送更新,您将无能为力。Telethon没有意识到这一点。Small nit,您可以使用
utils.get\u peer\u ID(event.message.to\u ID)
。当前使用
events.Raw
获取ID(v1.16.4)这是获取迁移更新的唯一方法,并且您正在正确地检查它们。如果用户升级时Telegram没有发送更新,您将无能为力。Telethon没有意识到这一点。Small nit,您可以使用
utils.get\u peer\u ID(event.message.to\u ID)
获取ID。