Ответы пользователя по тегу Python
  • Из-за чего вызывается ошибка?

    InternetMaster
    @InternetMaster
    Интернет
    Почему chat_id='' ?

    @dp.message_handler(commands=['start', 'help'])
    async def send_welcome(message: types.Message):
        user_channel_status = await bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)
        await message.reply("Hi!\nI'm EchoBot!\nPowered by aiogram.")
    
        if user_channel_status["status"] != 'left':
            await message.reply("Hi!\nI'm EchoBot!\nPowered by aiogram.")
        else:
            await message.reply("Hi!\nI'm EchoBot!\nPowered by aiogram.")
    Ответ написан
    Комментировать
  • Как 2 одинаковые функции использовать в разных местах [aiogram]?

    InternetMaster
    @InternetMaster
    Интернет
    Ну во первых вложенные декораторы это не клёво, советую так не делать.

    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)

    Здесь можно row_width не писать, ведь по умолчанию это 3, вам подходит.

    первая стоит раньше второй, и когда нужно проверить регион в сообщении, то вызывается функция которая проверяет опыт (первая)
    как их вызывать по отдельности?


    Ну конечно вызывается та, которая стоит первая. Она вызывается даже если пользователь введёт число, независимо от того, нужно ли его сейчас вводить.

    А решение простое - конечный автомат (он же машина состояний). State в aiogram
    Ответ написан
    Комментировать
  • Не могу проверить отправленное сообщение на тип введенных данных [aiogram]?

    InternetMaster
    @InternetMaster
    Интернет
    Ну во-первых это часть кода, нету даже самого Qnnaire.
    Нету, ошибки которая выдается (раз ты говоришь что не работает, только перезапустить)

    Но даже так все-равно не работает фильтр

    Какой фильтр?

    Кстати убери лямбду в декораторе над функцией taxi_exp, это ненужное отнимание ресурсов вычислительной техники, ведь если введено не число, его отловит функция выше
    Ответ написан
  • Как написать api для aiogram бота для общения с сервером flask?

    InternetMaster
    @InternetMaster
    Интернет
    Я думаю, что вам нужно чтобы ваш flask-сервер принимал запросы, (работал как API) и высылал сообщение от имени бота пользователю.
    Для этого нужно во flask импортировать нужную библиотеку (предлагаю pyTelegramBotAPI -> telebot) и принять из запроса во flask нужные данные (по типу кому отправлять, текст и т.д.).

    В этом случае flask сервер будет как некий посредник между тем кто отсылает запросы вашему серверу и непосредственно телеграм-ботом.
    Ответ написан
    Комментировать
  • В datetime к часам добавляется 2 часа, %H меняется с 0 на 02, как пофиксить?

    InternetMaster
    @InternetMaster
    Интернет
    В смысле "когда я передаю 2 часа"? Тот код, который вы предоставили переводит время из unix-time в обычное согласно тайминги на том компьютере, на котором выполняется код
    Ответ написан
    Комментировать
  • Как удешевить расходы на парсинг?

    InternetMaster
    @InternetMaster
    Интернет
    В идеале для 1 интернет-магазина - 1 vps/vds сервер
    Почему? Откуда это значение?

    Разбить парсинг по очереди, а не асинхронно делать, и все готово. 20 парсингов в день - это более 1 часа на 1 магазин в день! Разве одного VPS не хватит?
    Ответ написан
    Комментировать
  • Как определить качество изображения?

    InternetMaster
    @InternetMaster
    Интернет
    Сделать нейросеть. Она будет определять.
    Ответ написан
  • Как сделать меню команд в телеграм боте?

    InternetMaster
    @InternetMaster
    Интернет
    Да просто в BotFather заведи все нужные команды для бота.

    Если я помню, то это команда /setcommand, дальше следуй инструкциям
    Ответ написан
    Комментировать
  • Как сделать так чтобы бот реагировал на сообщения внутри текста?

    InternetMaster
    @InternetMaster
    Интернет
    Regexp твое спасение в том числе к if "" in ...
    Ответ написан
    Комментировать
  • Как сделать перезапуск бота по нажатию кнопки?

    InternetMaster
    @InternetMaster
    Интернет
    По сути это кнопка самоуничтожения всего от пользователя. То есть, нужно удалить абсолютно все данные, которые бот знает о пользователи (в основном в базе данных), и создать все заново.
    Ответ написан
    Комментировать
  • Как сделать топ баллов?

    InternetMaster
    @InternetMaster
    Интернет
    Нужно взять топ-10 пользователей с самыми высокими баллами, для этого SQLite запрос:
    SELECT username FROM users ORDER BY balli DESC LIMIT 10
    . Этим запросом получишь первые 10 пользователей по баллам.

    Как взять на каком месте юзер по баллам? Чтобы каждый раз не растрачивать ресурсы вычислительной техники, лучше всего вести отдельную таблицу с такими данными, обновляя её всякий раз, когда порядок лидерства будет изменяться.
    Если этого не хочется (или проект уже запущен, и нельзя изменить) нужно каждый раз брать всю таблицу пользователей с сортировкой по максимальному ID (тот же запрос из первой части ответа, только лимит порежь) , и прогонять по циклу for, пока не найдешь нужного пользователя.
    Представить только, что если там не 10, не 100 а 100000 пользователей, вычислительная техника сойдет с ума, еще если представить 20-30 таких запросов одновременно.
    Ответ написан
    2 комментария
  • Aogram Почему бот не отвечает на сообщение?

    InternetMaster
    @InternetMaster
    Интернет
    Все хорошо, но почему используется асинхронный aiogram, и неасинхронный sqlite3?
    Ответ написан
    Комментировать
  • Ошибка записи данных из бота в файл?

    InternetMaster
    @InternetMaster
    Интернет
    with open('C:\\Vash\\Put\\K\\Papke\\nuzhnoe_nazvanie.txt', 'a+') as file:
        file.write('Необходимый для записи текст')
        file.close()
    print('All done!')
    Ответ написан
    Комментировать
  • Как отправить все фотографии из папки в проекте, Telebot?

    InternetMaster
    @InternetMaster
    Интернет
    Если надо каждую отдельном то просто циклом for отправляешь все фото методом sendPhoto. Вот и все

    Или можно папку заархивировать и отправить ее и все
    Ответ написан
  • Как отправить первым сообщение пользователю в ТГ по его нику?

    InternetMaster
    @InternetMaster
    Интернет
    Если боту - то никак. Даже если пользователь первый напишет, то по нику - никак, только по ID. Правда, с 7 декабря 2021 (с версии 5.5) бот может первым написать:

    Теперь ботам разрешено связываться с пользователями, отправившими запрос на присоединение к чату, где бот является администратором с правами администратора can_invite_users , даже если пользователь никогда раньше не взаимодействовал с ботом.


    Если вообще нужно первому написать (не боту) то это уже MTProto API.
    Ответ написан
    Комментировать
  • Как добавить ссылку на номер телефона InlineKeyboardButton?

    InternetMaster
    @InternetMaster
    Интернет
    Вообще tel:77777777777 или tel://77777777777, но телеграм блокирует такие ссылки. Если попытаться отправить в другом приложении (например СМС, то все ок).

    При максимальной необходимости можно с использованием сайта дать пользователю ссылку на сайт, и уже на нем будет кнопка "Позвонить". По идеи не должно быть так, чтобы из браузера не позвонилось.
    Ответ написан
  • Aiogram: Как сохранить введенные данные пользователя?

    InternetMaster
    @InternetMaster
    Интернет
    Ну, а шаги то по State? Если да, то это await state.update_data(name='Вячеслав'). На втором шаге записываешь уже фамилию, или что там тебе угодно.

    В конце извлекаешь содержимое:
    n = await state.get_data()
    name = n['name']
    Ответ написан
    Комментировать
  • Бот не выводит встроенную клавиатуру, в чём может быть проблема?

    InternetMaster
    @InternetMaster
    Интернет
    Так ты же не привязал клавиатуру к сообщению. И кстати, ты уже назначил глобал переменную markup, хорошечно было бы её не перебивать локалом, а юзать иное название.

    Привязываю исправную версию кода
    import telebot
    import random
    import config
    from telebot import types
    from random import choice
    
    bot = telebot.TeleBot(config.TOKEN)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton('Расписание')
    markup.add(item1)
    
    
    
    
    @bot.message_handler(commands='start')
    def welcome(message):
      pic = open(r'aitvaro.jfif', 'rb')
      bot.send_photo(message.chat.id, pic)
    
      bot.send_message(message.chat.id, 'Привет, {0.first_name}! Я -<b>{1.first_name}</b>, Бот-помощник для учеников "Айтваро Гимназии"\nМогу подсказать расписание, даты каникул, фильм на вечер и многое другое'.format(message.from_user,bot.get_me()),
          parse_mode='html', reply_markup=markup)
      
    
    
    @bot.message_handler(content_types=['text'])
    def raspisanie(message):
      if message.chat.type == 'private':
        if message.text == 'Расписание':
          markup2 = types.InlineKeyboardMarkup(row_width=2)
          item21 = types.InlineKeyboardButton('1a', callback_data='1a')
          item22 = types.InlineKeyboardButton('1b', callback_data='1b')
          item23 = types.InlineKeyboardButton('1c', callback_data='1c')
          item24 = types.InlineKeyboardButton('1d', callback_data='1d')
          item25 = types.InlineKeyboardButton('2a', callback_data='2a')
          item26 = types.InlineKeyboardButton('2b', callback_data='2b')
          item27 = types.InlineKeyboardButton('2c', callback_data='2c')
          item28 = types.InlineKeyboardButton('2d', callback_data='2d')
          markup2.add(item21, item22, item23, item24, item25, item26, item27, item28)
          bot.send_message(message.chat.id, 'Выбери свой класс', reply_markup=markup2)
        else:
          bot.send_message(message.chat.id, 'Я не понял этого сообщения')
    
    
    
    @bot.callback_query_handler(func=lambda call: True)
    def callback_inline(call):
      pic1a = open('1a.png', 'rb')
      pic1b = open('1b.png', 'rb')
      pic1c = open('1c.png', 'rb')
      pic1d = open('1d.png', 'rb')
      pic2a = open('2a.png', 'rb')
      pic2b = open('2b.png', 'rb')
      pic2c = open('2c.png', 'rb')
      pic2d = open('2d.png', 'rb')
    
      try:
        if call.message:
          if call.data =='1a':
            bot.send_message(call.message.chat.id, pic1a, 'Расписание "1а" класса')
          elif call.data =='1b':
            bot.send_message(call.message.chat.id, pic1b, 'Расписание "1б" класса')
          elif call.data == '1c':
            bot.send_message(call.message.chat.id, pic1c, 'Расписание "1с" класса')
          elif call.data =='1d':
            bot.send_message(call.message.chat.id, pic1d, 'Расписание "1д" класса')
          elif call.data =='2a':
            bot.send_message(call.message.chat.id, pic2a, 'Расписание "2а" класса')
          elif call.data == '2b':
            bot.send_message(call.message.chat.id, pic2b, 'Расписание "2б" класса')
          elif call.data =='2c':
            bot.send_message(call.message.chat.id, pic2c, 'Расписание "2с" класса')
          elif call.data =='2d':
            bot.send_message(call.message.chat.id, pic2d, 'Расписание "2д" класса')
    
          else:
            ('Такого класса нет в списке')
      except Exception as e:
        print(repr(e))
    Ответ написан
    Комментировать
  • Есть ли в aiogram аналог "bot.register_next_step_handler" от telebot?

    InternetMaster
    @InternetMaster
    Интернет
    Нет, такого нет. Хотя есть State, можно с ней разобраться.

    Ссылку прилагаю: https://docs.aiogram.dev/en/latest/examples/finite...
    Ответ написан
    Комментировать
  • Как подключить калькулятор криптовалют к боту?

    InternetMaster
    @InternetMaster
    Интернет
    Нужно использовать API сервисов которые предоставляют курс нужной криптовалюты.
    Ответ написан
    Комментировать