Telethon как у entity определить канал это или группа и могу ли я в ней писать?

При получении списка всех диалогов Telethon делит их на три типа channel, chat, user как я могу определить что это за диалог канал или группа и как определить могу ли я в них писать, например если я забанен в группе?


Ответы (3 шт):

Автор решения: swag_es

Ответа на библиотеке telethon мне найти не удалось, но ещё немного постаравшись, мне удалось найти решение на библиотеке pyrogram, код ниже выведет вам тип диалога, диалоги в которых можно писать сообщения, идут под типом ChatType.GROUP и ChatType.SUPERGROUP:

import asyncio
from pyrogram import Client

api_id = api_id
api_hash = 'api_hash'


app = Client("account", api_id, api_hash)
app.start()


async def get_dialog():
    async for dialog in app.get_dialogs():
        print(dialog.chat.type)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(get_dialog())
→ Ссылка
Автор решения: Ignat Karelov-Suslov

Думаю уже ответ не актуален, но возможно поможет тем, кто только наткнулся на эту проблему. С обновлением библиотеки, определить ТОЧНЫЙ тип диалога - нельзя, но можно понять, пользователь или группа/канал, делает это просто:

async def main():
    await client.start()
    async for dialog in client.iter_dialogs():
      print(f'type - {dialog.is_user}')
→ Ссылка
Автор решения: NSA-bot

Понять, канал или чат, можно проверяя у диалога параметр "dialog.entity.megagroup":

for dialog in client.iter_dialogs():
    if 'Channel' in str(type(dialog.entity)):  # откидываем юзеров
        if dialog.entity.megagroup:
            print(dialog.entity.id, '//', dialog.entity.username, ' - ', dialog.name, ' is CHAT')
        else:
            print(dialog.entity.id, '//', dialog.entity.username, ' - ', dialog.name, ' is CHANNEL')
→ Ссылка