Ответы пользователя по тегу Telegram
  • Можно ли восстановить бота в телеграмме после удаления у фазербота?

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

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

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

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

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    И в чат так же можно, если у бота есть доступ к написанию сообщений в группу и в качестве chat_id передан правильный id чата.
    Ответ написан
  • Aiogram. Как отправить сообщение повторно зная его message_id?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нет, невозможно через Bot API получить информацию по ранее отправленным сообщениям. Следовало сохранять эти сообщения или исходную информацию, на которой они были основаны.
    Ответ написан
    Комментировать
  • Не работает callback при создании телеграм бота, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    И не будет работать. У тебя два обработчика с одинаковым фильтром. Использоваться будет первый, в нём обрабатывается только bts2 и bts1. Решения:

    1. Или переместить содержание второго обработчика в первый.

    2. Или в обработчике сделать более узкий фильтр, например:

    @bot.callback_query_handler(func=lambda call: call.data.startswith('bts'))
    ...
    
    @bot.callback_query_handler(func=lambda call: call.data == 'startzen')
    ...
    Ответ написан
    7 комментариев
  • Как с помощью бота добавлять других ботов в чат телеграм?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В этом примере бот получает сообщение с ТЕКСТОМ /delete, пытается найти в нём forward_from_message_id (откуда???) и удалить в чате с пользователем-отправителем сообщение с таким id. Довольно очевидно, что это работать не будет вообще никак.

    Какая вообще задача стояла?
    Ответ написан
    8 комментариев
  • Создание телеграм бота для оповещения?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ох, ну тут всё неправильно.

    Не надо пихать ещё одну функцию send_message внутри send_message. Их надо вынести на один уровень. И вообще, назвать более адекватно их содержанию. Ведь первая обрабатывает команду /weather, а вторая - название города. Странно называть их одинаково неопределённым send_message (чтоб враги не догадались?).

    Что происходит в этом коде? Сначала мы регистрируем обработчики команд /weather и /start с помощью декоратора. При вызове /weather мы КАЖДЫЙ раз (ведь это часть функции-обработчика на следующем уровне вложенности!) заново определяем обработчик для content_type=text. Далее после первого вызова /weather этот обработчик начинает работать на все текстовые сообщения. Причём на сообщения ВСЕХ пользователей нашего бота. То есть реально, один вызывает /weather и тем самым изменяет поведение бота для всех пользователей сразу. Если в боте будет где-то ещё определяться таким же "внутренним" описанием ещё один обработчик content_type=text, то он будет всегда игнорироваться до следующего перезапуска бота, ведь один обработчик текстовых сообщений уже есть и он всегда будет применяться.

    Чего удивительного в том, что бот работает ровно так же странно, как странно написано в его коде?

    Надо понимать, что обработчик сообщения принимает ОДНО сообщение и его обрабатывает. Он не может принять сообщение и ещё сразу же следующее. Каждое обработается своим обработчиком. Чтобы обработка сообщений зависела от ряда сообщений, используют FSM (Finite State Machine), машину состояний. В telebot есть довольно простая в использовании FSM на основе вызова register_next_step_handler. Вызов register_next_step_handler переопределяет то, каким обработчиком будет обработано следующее сообщение с этим пользователем (точнее, в этом chat_id, который может быть и идентификатором группы).

    Собственно, принцип работы такой: когда пользователь вызывает /weather, мы должны с помощью вызова bot.register_next_step_handler зарегистрировать кастомный обработчик следующего сообщения. Этот обработчик будет обрабатывать только сообщения этого пользователя, подобное поведение не будет влиять на других пользователей. Для более сложных взаимодействий можно делать длинные и даже ветвящиеся цепочки обработчиков, спрашивать у пользователя разные данные, предлагать изменить ранее введённые данные итд итп.

    Официальный пример использования смотреть тут.
    Ответ написан
    1 комментарий
  • Как получить все группы в которых состоит бот?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если это именно бот, а не пользователь, то никак. В Bot API нет такой функциональности. Можно только самому отслеживать добавления/удаления бота с самого начала его существования.

    Для юзербота пример есть прямо в документации: https://docs.pyrogram.org/start/examples/get_dialogs
    Ответ написан
  • Как реализовать приветствие подписчика на канале?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Настройки приватности позволяют скрыть свой номер:
    spoiler
    62435d177916c426454953.png
    Ответ написан
    Комментировать
  • Можно ли telegram бота подключить сразу к двум сервисам через один токен?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нельзя. Сообщения пользователя будет получать или один, или другой.

    Но потенциально можно отправлять пользователям сообщения из разных источников. Правда, придётся наладить обмен информации по пользователям между этими двумя источниками. Что само по себе немного странная задача.
    Ответ написан
    1 комментарий
  • Отправка сообщений из канала Телеграм в группу Вк?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если канал свой или есть связи с его админом, то пишем бота, добавляем его в канал, далее бот может ловить сообщения в этом канале и выполнять с ними какие-то действия.

    Если канал чужой, то придётся парсить его с помщью клиентского API, боты не могут видеть какие угодно каналы.
    Ответ написан
    Комментировать
  • Как правильно отправлять запросы к Telegram API (не Bot API)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Там не просто http-протокол, поэтому легко это повторить нельзя. Если интересно именно php, то советуют библиотеку https://github.com/danog/MadelineProto

    Для python - библиотека telethon или, как вариант, pyrogram. Для js - mtproto-core. Большинство ботописателей используют python и telethon.
    Ответ написан
    Комментировать
  • Как исправить ошибку при работе с inline mode?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    А что делает message_text у InlineQueryResultArticle? Это параметр конструктора InputTextMessageContent. Неудивительно, что ругается.
    Ответ написан
    Комментировать
  • Как заставить бота работать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    А как он должен работать, если ты в обработчике zodiac создаёшь переменную msg, но никаких сообщений не отправляешь? До кучи, как по-твоему это будет работать, если call.data на всех кнопках одинаковый, как бот их будет различать?
    Ответ написан
  • Aogram Почему бот не отвечает на сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, это потому что "в конце". Обработчики перебираются последовательно, и как находится подходящий, остальные не используются. А тут два обработчика с одинаковым декоратором, естественно, что первый будет применяться, а второй уже нет.

    Надо или обрабатывать обе команды в одной функции, или отфильтровать в декораторе так, чтобы он применялся только к конкретным сообщениям

    Условие commands=["баланс"] в декораторе позволит использовать команду как /баланс

    А вот такой вариант:

    @dp.message_handler(lambda message: message.text and (message.text.lower() == "баланс"))
    позволит сделать то же самое без / перед словом "баланс". И вообще, так можно делать более сложные проверки.
    Ответ написан
  • Как сделать мультиязычность в aiogram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Как и любую многоязычность - через замену прямого вывода строк на языкозависимую подстановку нужного варианта. Можно как самому запилить, так и использовать готовые решения. Например, вот тут обсуждали gettext https://qna.habr.com/q/960557
    Ответ написан
  • Как записать сообщение пользователя тг бота в переменную и передать ее в парсер(переменная это абривиатура криптовалюты),?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Использовать register_next_step_handler пример.
    Ответ написан
    Комментировать