Задать вопрос
@reversedebil

В чем ошибка данного кода?

async def get_chat_info(username):
    try:
        chat = await client(ResolveUsernameRequest(username))
        result = {
            'chat_id': chat.peer.channel_id,
            'access_hash': chat.chats[0].access_hash,
            'title': chat.chats[0].title,
            'username': username
        }
    except Exception as e:
        result = None
    return result

async def dump_users(chat):
    offset = 0
    limit = 200
    counter = 0
    all_participants = []
    while_condition = True
    cha = await InputChannel(chat['chat_id'], chat['access_hash'])
    while while_condition:
        try:
            participants = await client(GetParticipantsRequest(cha, ChannelParticipantsSearch(''), offset, limit, hash=0))
        except:
            return 'null'
        for x in participants.users:
            db.add_to_db(x.id, x.username, x.first_name, chat['chat_id'])
        if len(participants.users) == 0:
            break
        offset += len(participants.users)
        counter += len(participants.users)
        sleep(0.1)
    return counter

@dp.message_handler(content_types=['text'])
async def main(message : types.Message):
    if message.text.isdigit():
        await bot.send_message(message.chat.id, 'Начинаем сбор информации...')
        if db.exists_user(message.chat.id):
            await bot.send_message(message.chat.id, 'Нашелся в базе...')
        else:
            await bot.send_message(message.chat.id, '<b>Пользователь не найден ни в одном чате.</b>\n\n<i>Если хотите добавить чат в базу, введите /addchat t.me/чат .</i>')
    elif '/addchat' in message.text:
        link = message.text.split(" ")[1]
        if 'joinchat' in link:
            link = link.split("joinchat/")[1]
            if db.exists_chat(link) == None:
                #try:
                activate = await client(CheckChatInviteRequest(hash=link))
                dan = await get_chat_info(link)
                cha = await InputChannel(dan['chat_id'], dan['access_hash'])
                participants = await client(GetParticipantsRequest(cha, ChannelParticipantsSearch(''), 0, 200, hash=0))
                if len(participants.users) <= 20:
                    count = await dump_users(dan)
                    db.add_to_chats(user_id=dan['chat_id'], userka=link, namer=dan['title'])
                    await bot.send_message(message.chat.id, f'{count} users сохранено.')
                else:
                    await bot.send_message(message.chat.id, f'<b>Чат должен иметь больше 20 пользователей.</b>')
                #except Exception as e:
                #    print(repr(e))
                #    await bot.send_message(message.chat.id, "<b>Ссылка неактивна или не рабочая. Попробуйте еще раз</b>")
            else:
                await bot.send_message(message.chat.id, "<b>Данный чат уже есть в базе.</b>")
        else:
            link = link.split("t.me/")[1]
            if db.exists_chat(link) == None:
                #try:
                dan = await get_chat_info(link)
                cha = await InputChannel(dan['chat_id'], dan['access_hash'])
                participants = await client(GetParticipantsRequest(cha, ChannelParticipantsSearch(''), 0, 200, hash=0))
                if len(participants.users) <= 20:
                    count = await dump_users(dan)
                    db.add_to_chats(user_id=dan['chat_id'], userka=link, namer=dan['title'])
                    await bot.send_message(message.chat.id, f'{count} users сохранено.')
                else:
                    await bot.send_message(message.chat.id, f'<b>Чат должен иметь больше 20 пользователей.</b>')
                #except Exception as e:
                #    print(repr(e))
                #    await bot.send_message(message.chat.id, "<b>Ссылка неактивна или не рабочая. Попробуйте еще раз</b>")
            else:
                await bot.send_message(message.chat.id, "<b>Данный чат уже есть в базе.</b>")
    else:
        pass
Это код моего бота. Он будет проверять в каких чатах есть пользователь.

Вот ошибка:
<blockquote>
  File "C:\Users\Analyzer\Desktop\Deanon BOT\bot.py", line 113, in main
    cha = await InputChannel(dan['chat_id'], dan['access_hash'])
TypeError: 'NoneType' object is not subscriptable
</blockquote>

Помогите пожалуйста. Он так только с приватными ссылками чатов, часом ранее такого не было :/
  • Вопрос задан
  • 288 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Чтобы понять, почему возращает None, нужно убрать эту потрясающую конструкцию с try ... except. Произошла ошибка? Да и ладно.
try:
        chat = await client(ResolveUsernameRequest(username))
        result = {
            'chat_id': chat.peer.channel_id,
            'access_hash': chat.chats[0].access_hash,
            'title': chat.chats[0].title,
            'username': username
        }
    except Exception as e:
        result = None


ResolveUsernameRequest не резолвит id из joinchat ссылки.

from telethon.tl.functions.messages import CheckChatInviteRequest
chat = client(CheckChatInviteRequest('XXXXXXXXXXXX'))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@UberPool
Python/JS coder
Ну тебе возвращает None.
Для того что бы возвращать информацию из приватных чатов,нужно в них находится.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы