Задать вопрос
  • Зачем нужен декоратор @dp и все в этом духе, типо @dp.message_handler() в aiogram?

    Vindicar
    @Vindicar
    RTFM!
    На пальцах: чтобы бот работал, его функции должны вызываться при наступлении определённых событий (например, входящего сообщения). Проблема в том, что aiogram знает о возможных событиях, но ему нужно сказать, какие функции когда вызывать. Обычно это называется "зарегистрировать обработчик".
    В питоне функции - объекты первого рода, т.е. их можно сохранять в переменные, передавать как параметры, возвращать как результат и вообще поступать с ними как с любым другим значением.
    Т.е. по идее можно было бы сделать так:
    async def echo(message: Message):
        text = f"Привет, ты написал {message.text}"
        await bot.send_message(chat_id=message.from_user.id, text=text)
    
    dp.register_function_for_message(echo)  # это не настоящий метод aiogram, только пример

    Тогда каждому объявленному обработчику событий соответствовал бы вызов метода, ответственного за регистрацию этого обработчика.

    Но то же самое можно сделать через декораторы. Декоратор - это сокращённый вызов функции, которая принимает в качестве параметра другую функцию.
    Т.е. вот это
    @dp.message_handler()
    async def echo(message: Message):
        text = f"Привет, ты написал {message.text}"
        await bot.send_message(chat_id=message.from_user.id, text=text)

    абсолютно эквивалентно вот этому
    _decorator = dp.message_handler()
    
    async def echo(message: Message):
        text = f"Привет, ты написал {message.text}"
        await bot.send_message(chat_id=message.from_user.id, text=text)
    
    echo = _decorator(echo)

    Как видишь, очень похоже на "простую" регистрацию обработчика, но записывается чуть короче.
    Ответ написан
  • Возможно ли узнать свои права?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Да, возможно. Для этого можно использовать метод getChatMember из библиотеки telebot. Этот метод возвращает объект типа ChatMember, содержащий информацию о статусе и правах члена беседы.

    Пример использования:

    import telebot
    
    bot = telebot.TeleBot(TOKEN)
    
    chat_id = 12345
    user_id = 67890
    
    chat_member = bot.get_chat_member(chat_id, user_id)
    print(chat_member.status)  # статус члена беседы (например, "creator" или "member")
    print(chat_member.can_send_messages)  # True/False - может ли член беседы отправлять сообщения
    print(chat_member.can_change_info)  # True/False - может ли член беседы изменять информацию о беседе

    Обратите внимание, что для вызова этого метода вам нужно будет указать chat_id - идентификатор беседы, в которой вы хотите узнать права, и user_id - идентификатор пользователя (в этом случае это идентификатор бота.
    Ответ написан
    Комментировать
  • Случайно число от 0 до 5 и присвоить значение переменным?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    randint, как следует из его названия, возвращает целое число. Почему вы сравниваете его со строкой?
    Ответ написан
    3 комментария
  • Как сделать удаление истории сообщений?

    @szjyakgf
    Значение True означает что скипнулись сообщения, False соответственно наобор
    if __name__ == "__main__":
        executor.start_polling(dp, skip_updates=True)
    Ответ написан
    1 комментарий
  • Как сделать постоянное редактирование сообщения в телеграм?

    @AlbertForest
    Ну постоянно оно обновляться не будет. У телеграма есть ограничение по времени на редактирование (2е суток если не ошибаюсь).

    Ну а в целом тебе нужно что-то, что будет регулярно обновлять курс и редактировать сообщение. Хотя бы тупо цикл
    Ответ написан
    Комментировать
  • Бот не отправляет переменные?

    Vindicar
    @Vindicar
    RTFM!
    'Карта: " + str(a) + " " + str(b) + " " + str(c) + " " + str(d) +"\nCVV: " + str(e))'

    У тебя внешние кавычки одни, а внутренние другие. Так что весь этот фрагмент - одна строковая константа, а двойные кавычки внутри - просто символы.
    К слову, научись использовать f-строки.
    f"Карта: {a} {b} {c} {d}\nCVV: {e}"
    Ответ написан
    Комментировать
  • TelegramBot Python?

    Проверять chat.id и сверять их
    Ответ написан
    Комментировать