Ответы пользователя по тегу Telegram
  • Как исправить ошибку в написании Telegram-бота - python (aiogram)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    И не будет реагировать. Ведь в момент выполнения этого кода message.text == '/game1'.

    Ищи примеры по ключевым словам FSM aiogram.
    Ответ написан
    Комментировать
  • Можно ли получить телеграм id по номеру телефона?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, потенциально клиентский API Телеграма открыт и позволяет сделать поиск по номеру телефона. Но надо понимать, что пользователь может запретить настройками находить себя по номеру телефона. Также надо понимать, что при сколько-нибудь массовом поиске по номеру телефона Телеграм отреагирует и заблокирует.

    Рекомендую отказаться от этой затеи.
    Ответ написан
    2 комментария
  • У всех одинаковое кол - во рефералов, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Проблема здесь:

    cur.execute('UPDATE users SET refferals = ?', str(refs))


    Это стандартная ошибка update without where. При таком запросе UPDATE изменяет все строки таблицы на одно и то же значение. Нужно изменять с фильтром WHERE конкретную запись.
    Ответ написан
    Комментировать
  • Как поймать юзер-бота телеграм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В общем случае это проблематично. Но если совсем-совсем не жалко пользователей, то можно сделать так: удалить половину, запостить какую-нить хрень, посмотреть была ли утечка хрени. Если была - юзербот в этой половине, не была - в другой половине. Дальше возвращаем удалённых пользователей обратно и убираем только половину группы с юзерботом... в общем, бинарным поиском.

    Бедные пользователи...
    Ответ написан
  • Бот проверки подписки в телеграм работает не корректно, как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Бот всё делает так, как написано. А написано проверить, что проверяем, что пользователь по очереди creator/administrator/member и если нет - то ругаемся. Соответственно, если пользователь подписан, то два раза ругнётся и один раз поздравит (в соответствии с тем, какой у него статус, это будет 1/2/3 сообщение в цепочке).

    Надо выкинуть цикл for stat in status вообще. Получить статус пользователя один раз и проверить его:

    status = bot.get_chat_member(chat_id = '-1001670595457', user_id = message.from_user.id).status
    if status in ['creator, administrator', 'member']:
        ...
    Ответ написан
    2 комментария
  • Как вывести массив одним сообщением чтобы значение было с новой строчке?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ну если в цикле делать message.answer по числу элементов в market_name, то сколько ответов напишет бездушный бот? Надо сообщение собрать в одну переменную и затем отправить за один раз. И два цикла тут вообще не к месту, всё можно в одном делать:

    answer_message_text = ""
    for tickers in data2['tickers']:
        answer_message_text += f"{tickers['market']['name']} - {tickers['trade_url']}\n")
        # а надо ли ещё какие-то массивы использовать?
        #market_name.append(tickers['market']['name'])
        #market_link.append(tickers['trade_url'])
    await message.answer(answer_message_text)
    Ответ написан
  • Как убрать ошибку в TeleBot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Так проверяй, что message.text cостоит из цифр (например, методом isdigit). Или лови исключение ValueError.
    Ответ написан
    Комментировать
  • Как сделать минимального бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Берём простейший эхобот на %любимый_язык_программирования% и чуть-чуть подправляем текст ответного сообщения под свои требования.

    Если %любимого_языка_программирования% нет, как и вообще навыков программирования, то обращаемся на фриланс.
    Ответ написан
    Комментировать
  • Пишу код для Telegram Бота, как не делать тупые ошибки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сначала надо изучить язык программирования, потом освоить нужную библиотеку и уже тогда писать бота. А то это как выехать на трассу, купив водительсике права, но не изучив азы вождения.
    Ответ написан
    Комментировать
  • Как заставить телеграм бота работать через аккаунт пользователя от имени пользователя?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, это возможно, но придётся вместо Bot API использовать клиентский API (с протоколом MTProto). Тут наиболее распространены библиотека telethon для Python и официальная библиотека tdlib.
    Ответ написан
    Комментировать
  • Как получить id всех участников группы в тг?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В Telegram Bot API нельзя получить список участников группы, только общее количество getChatMemberCount, список администраторов getChatAdministrators и информацию о конкретном участнике чата по заранее известному id пользователя getChatMember. Именно поэтому вагоны примеров в поисковиках в основном используют библиотеку telethon.
    Ответ написан
    Комментировать
  • Как в telebot отправить сообщение в виде таблицы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Очевидно, что если в цикле вызывать send_message, то будет отправлено столько сообщений, сколько итераций цикла. Надо собрать сообщение в одну переменную и затем одной операцией send_message его отправить. Примерно так:

    message_text = ""
    for res in cursor.fetchall():
        message_text += "{0} {1}".format(res[0], res[1]))
    bot.send_message(..., message_text)
    Ответ написан
  • Как узнать апи пользователя который отправил сообщение телеграмм боту?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, бот не может узнать IP пользователя.
    Ответ написан
  • Как отправить сообщение от телеграм-бота на python определенным пользователям, при запросе от создателя?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для начала, id - это число. Зачем хранить их в виде строк?

    Далее, при отправке from_user.id сравнивается также со строкой. Конечно же, равенство строки и числа невозможно.

    И, наконец, отправка должна идти по числовому id.

    Надеюсь, все адмиины из массива нажали /start у бота? Без этого им сообщения отправлять будет нельзя.
    Ответ написан
    7 комментариев
  • Как удалить кнопку из клавиатуры telebot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нельзя удалить одну кнопку. Можно либо удалить всю клавиатуру целиком, либо отправить другую клавиатуру на замену. Соответственно, для удаления всего одной кнопки нужно помнить, какую клавиатуру отправлял в прошлый раз (хранить это явным образом или определять из контекста), чтобы отправить новую клавиатуру без этой кнопки.
    Ответ написан
    Комментировать
  • Как вызывать команды внутри машины состояний aiogram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Лучше всего, конечно, выносить общую часть функционала в отдельную функцию. Например, пусть в обработчике /start информация о пользователе добавляется в базу и отправляется приветственное сообщение с какой-нибудь справкой по использованию. Скорее всего, повторно добавлять в базу не надо, а вот приветственное сообщение можно и выделить в какую-нибудь send_welcome_message (естественно, с параметром chat_id и при необходимости другими параметрами, нужными для её работы). Типа, пользователь запустил бота, поотвечал на вопросы, потом получил опять приветственное сообщение с информацией о своей работе, которую пользователь уже успел забыть, пока заполнял анкету.

    Но если прям очень хочется, то можно вызвать функцию напрямую. Но если она обёрнута декоратором, то её вызвать напрямую может быть опасно, так как после применения декоратора это будет уже другая функция, которая имеет право создавать какие-нибудь спецэффекты при своём запуске. Если регистрировать без декораторов, вызовами register_message_handler, то исходная функция изменяться не будет, но с декораторами можно писать более красиво.
    Ответ написан
    Комментировать
  • Какие библиотеки позволяют писать и юзерботов и ботов телеграмм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Такая библиотека только одна - pyrogram. Её авторы пытаются реализовать одинаковый интерфейс для двух разных видов API Телеграма. Если при инициализации бота передать токен - будет использоваться Bot API, если имя сессии - будет при первом запуске проведена авторизация в Телеграме, а потом будет всегда работать из-под пользователя при каждом запуске. Конечно, совсем без нюансов и различий нельзя, но в целом это работает.

    Но даже с этой библиотекой придётся инициализировать двух разных ботов и организовывать между ними какое-то взаимодействие (что может вылиться в дополнительную не самую простую задачу). Например, боту требуется по запросу отправить большой файл, он из API userbot'а отправляет самому себе (обычному боту) файл, тот получает file_id и пересылает его конечному пользователю.

    Поскольку ботов фактически будет всё равно два, то они могут использовать и разные библиотеки. Например, aiogram и telethon или telebot (AsyncTeleBot?) и pyrogram.
    Ответ написан
    Комментировать
  • Неправильно работает анти-флуд в боте телеграм, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Пока бот выполняет time.sleep, он ниего не делает. Нужно использовать либо треды, либо asyncio (с асинхронным же asyncio.sleep).
    Ответ написан
    5 комментариев
  • Можно ли восстановить бота в телеграмме после удаления у фазербота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нет, только создать нового с аналогичными реквизитами.
    Ответ написан
    Комментировать
  • Не могу найти ошибку в коде Python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не надо ловить абстрактный Exception вообще никогда! Тем более игнорировать его и даже не выводить в консоль. Произошла ошибка, а какая, почему произошла - ваще непонятно.

    Какие тут могут случиться ошибки? Ну, например, если в user_dict нет записи с ключом chat_id, то случится KeyError. Или если в getRegData возвращается невалидный markdown-текст, то случится ошибка ApiException.

    А далее после обработки exception путём его игнорирования тут снова вызывается register_next_step_handler, который приводит к тому, что вводимые пользователем данные снова попадают в тот же обработчик и - вероятно - натыкаются на ту же самую ошибку. Например, KeyError: конечно, ведь как при прошлом запуске этого обработчика не было значения с таким ключом, так и при последующих не появится.

    До кучи, не надо вызывать постоянно bot.get_me(). Это каждый раз будет вызов API. Неужели имя бота меняется каждую минуту? Достаточно запомнить при запуске бота - и достаточно.
    Ответ написан
    Комментировать