• Какой проект подойдет для Джуниора Python?

    @qid00000000
    Мало что знаю, но информацию найду в гугле
    Возьми интересную задачу, которую ты хочешь решить (не важно, насколько сложна она будет).

    Декомпозируй (разбей проблемы на лёгкие части).

    Организуй процесс решения проблемы:
    Что ты будешь делать, если поймёшь, что идёшь в неправильном направлении (git)? Как будешь ставить, отслеживать и выполнять задачи (таск трекер)? Как проверить, что то, что ты сделал работает корректно (тестирование)?

    Ответь на вопросы:
    Как запускать? Через что? На чем?

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

    Так и родится твой проект.
    Ответ написан
    Комментировать
  • Как настроить parse_mode и переменную?

    RimMirK
    @RimMirK
    Вроде человек. Вроде учусь. Вроде пайтону
    используй HTML разметку
    Ответ написан
    Комментировать
  • Как сделать так, чтобы бот отправил сообщение после определённого времени, но можно было что либо делать в боте?

    Bagadan
    @Bagadan
    Я богдан
    чат гпт сказал так

    import telebot
    import datetime
    import schedule
    import time
    
    # Введите здесь токен вашего бота
    TOKEN = 'YOUR_BOT_TOKEN'
    
    # Создаем экземпляр бота
    bot = telebot.TeleBot(TOKEN)
    
    # Функция, которая будет вызываться каждый день в 15:00
    def scheduled_reply():
        # Отправляем сообщение в определенный чат
        chat_id = 'CHAT_ID'  # Замените на ID чата, в который вы хотите отправить сообщение
        message = "Привет! Это ежедневное сообщение от бота."
        bot.send_message(chat_id, message)
    
    # Обработчик команды /start
    @bot.message_handler(commands=['start'])
    def start(message):
        # Отправляем приветственное сообщение
        bot.reply_to(message, "Привет! Я бот, который будет отвечать раз в день в 15:00.")
    
    # Обработчик команды /hello
    @bot.message_handler(commands=['hello'])
    def hello(message):
        # Отправляем приветственное сообщение
        bot.reply_to(message, "Привет! Как дела?")
    
    # Планирование выполнения функции scheduled_reply каждый день в 15:00
    schedule.every().day.at("15:00").do(scheduled_reply)
    
    # Запуск планировщика в отдельном потоке
    def scheduler():
        while True:
            schedule.run_pending()
            time.sleep(1)
    
    # Запускаем обработчик команд и планировщик в отдельных потоках
    import threading
    
    command_thread = threading.Thread(target=bot.infinity_polling)
    scheduler_thread = threading.Thread(target=scheduler)
    
    command_thread.start()
    scheduler_thread.start()


    я несколько раз переспросил его уверен ли он в своем ответе он пару раз поправил
    Ответ написан
    Комментировать
  • Как проверить, есть ли в строке слова из списка?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    if any(s in string for s in exclude_words):
        print("Строка содержит слова из списка")

    if set(string.split()) & set(exclude_words):
        print("Строка содержит слова из списка")
    Ответ написан
    1 комментарий
  • Как отправить переменную вместе с сообщением?

    gnifajio
    @gnifajio
    Совершенствуюсь каждый день
    Я советую вам сначала выучить python, а потом уже делать ботов.
    В ответ на ваш вопрос я могу дать вам это (машины состояний).
    Советую к прочтению.
    Ответ написан
    Комментировать
  • Как создать красивые inline кнопки для питона (telegram, aiogram)?

    deepblack
    @deepblack Куратор тега Python
    почему у тебя во втором варианте указано
    row_width=1
    Ответ написан
    1 комментарий
  • Почему не получается получить значение из словаря python?

    @deliro
    Потому что ты не читал документацию
    Потому что requests.get отдаёт объект Response
    Потому что твой JSON приходит в крайне странном формате (внутри HTML)
    Потому что ты даже не знаешь что такое JSON

    Выбирай любой вариант и он будет верным
    Ответ написан
    Комментировать
  • Как сделать так чтобы клиента, при нажатии на кнопку бота в телеграм перекидывало в личку с определенным человеком?

    @nozzy
    Symfony, Laravel, SQL
    Через урл можно, но только если у целевого юзера заполнен username
    Ответ написан
    Комментировать
  • Квиз бот телеграм aiogram. Как реализовать проверку ответа на правильность?

    @twistfire92
    Python backend developer
    Для реализации квиза советую изучить еще механизм FSM, в интернете полно примеров.
    Но даже без него в callback_data кнопок можно засунуть строки:
    в первой кнопке - "answer|q1|a1|0"
    во второй - "answer|q1|a2|1"
    в третьей - "answer|q1|a3|0"
    в четвертой - "answer|q1|a4|0"

    Вот таким образом в каждой кнопке указано:
    answer - указатель, что это кнопка ответа
    q1 - номер вопроса
    a1-a4 - номер ответа
    1/0 - флаг правильного/неправильного ответа.

    Для себя можете выбрать любую структуру этих данных. Эти данные пользователь не увидит, это увидите и обработаете только вы.

    обработчик нажатия на кнопку можно будет сделать следующим образом:
    @dp.callback_query_handler(lambda call: call.data.startswith("answer")

    Таким образом в этот обработчик попадут только нажатия на кнопки вопросов.
    Дальше разбираем данные в callback_data с помощью call.data.split("|")

    Дальше уже в ход идет ваша фантазия
    Ответ написан
    Комментировать
  • Как правильно разбить текст по переносам строк?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Как то так
    s = """
    Название (1строка)
    Описание(несколько строк)
    Описание(несколько строк)
    Описание(несколько строк)
    Описание(несколько строк)
    Описание(несколько строк)
    Стоймость (1 строка)
    """
    
    l = s.strip().split("\n")
    
    name = l[0]
    price = l[-1]
    desc = ' '.join(l[1:-1])
    Ответ написан
    1 комментарий
  • Почему вылезает ошибка "_tkinter.TclError: unknown option "-height""?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Почему вылезает такая ошибка

    Потому что параметра height у ttk кнопок не существует.

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

    shabelski89
    @shabelski89
    engineer
    конечно, вот пример я для callback использую конструкцию, потому что список переменной длины.
    l = ['Яблоко', 'Груша']
    keyboard = types.InlineKeyboardMarkup()
    backbutton = types.InlineKeyboardButton(text="Back", callback_data="MainMenu")
    button_list = [types.InlineKeyboardButton(text=x, callback_data=x) for x in l]
    keyboard.add(*button_list, backbutton)
    Ответ написан
    1 комментарий
  • Как заставить условие повторяться пока False?

    @twistfire92
    Python backend developer
    def form_auth_name(message):
        chek_login = message.text
        if not str(chek_login) == db.auth_user_form(message.text):
            mess = bot.send_message(message.chat.id, 'Неверный логин')
            bot.register_next_step_handler(mess, form_auth_name)
        else:
            mess = bot.send_message(message.chat.id, 'Введите свой пароль.')
            bot.register_next_step_handler(mess, form_auth_password)
    Ответ написан
    Комментировать
  • Как узнать значение "city"?

    igorzakhar
    @igorzakhar
    Это словарь и есть, можешь проверить так:
    type(r.json())

    Соответственно, у словаря есть ключи, которые можно посмотреть методом keys():
    >>> geo = {'format': 'json', 'lat': f'51.22778325', 'lon': f'51.43176735508452'}
    >>> r = requests.get('https://nominatim.openstreetmap.org/reverse', params=geo)
    >>> r.json()
    {'place_id': 158413949,
     'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright', 
     'osm_type': 'way', 'osm_id': 227214466,
     'lat': '51.22778325', 
     'lon': '51.43176735508452', 
     'display_name': '2/3, улица Юрия Гагарина, Уральск, Уральск Г.А., Западно-Казахстанская область, 090005, Қазақстан', 
     'address': {'house_number': '2/3', 'road': 'улица Юрия Гагарина', 'city': 'Уральск', 'county': 'Уральск Г.А.', 'state': 'Западно-Казахстанская область', 'ISO3166-2-lvl4': 'KZ-ZAP', 'postcode': '090005', 'country': 'Қазақстан', 'country_code': 'kz'}, 
     'boundingbox': ['51.2274636', '51.2280884', '51.4309297', '51.4323584']}
    >>> type(r.json())
    <class 'dict'>
    >>> r.json().keys()
    dict_keys(['place_id', 'licence', 'osm_type', 'osm_id', 'lat', 'lon', 'display_name', 'address', 'boundingbox'])
    >>>


    UPD. В значении ключа address тоже словарь. Узнать ключи словаря в address:

    ...
    >>> r.json().get('address').keys()
    dict_keys(['house_number', 'road', 'city', 'county', 'state', 'ISO3166-2-lvl4', 'postcode', 'country', 'country_code'])
    ...


    Узнать значение поля city можно так:

    ...
    >>> r.json().get('address').get('city')
    'Уральск'
    ...
    Ответ написан
    2 комментария
  • Как в callback_query_handler вставить register_next_step_handler?

    @twistfire92
    Python backend developer
    Советую начать с выбора модели велика. Это видимо единственный пункт, который выбирается Inline кнопками.
    Да и если у пользователя велосипед не из предложенного набора, тут же соскочит и не будет вводить лишнее.

    возьму ваш же код за основу и чуть видоизменю
    ...
    	elif message.text == ' Регистрация велосипеда ':
    		markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    		btn1 = types.KeyboardButton(' Где наша мастерская? ')
    	 	btn2 = types.KeyboardButton(' Посмотреть прайс на ремонт ')
    		btn3 = types.KeyboardButton(' Наши контакты ')
    		btn4 = types.KeyboardButton('⏭ Далее ⏭')
    		markup.add(btn1, btn2, btn3, btn4)
    		bot.send_message(message.chat.id, 'Давайте запишем Ваш байк в базу данных.', reply_markup=markup)
    		markup_inline = types.InlineKeyboardMarkup()
    		#  Обратите внимание на callback_data при создании кнопки
    		bk1 = types.InlineKeyboardButton(text='Stels', callback_data='bike_model|Stels')
    		bk2 = types.InlineKeyboardButton(text='Forvard', callback_data='bike_model|Forvard')
    		bk3 = types.InlineKeyboardButton(text='Кама', callback_data='bike_model|Кама')
    		bk4 = types.InlineKeyboardButton(text='Урал', callback_data='bike_model|Урал')
    		markup_inline.add(bk1, bk2, bk3, bk4)
    		bot.send_message(message.chat.id, 'Выберите модель', reply_markup=markup_inline)
    
    #  На случай, если у вас будут еще какие-либо инлайн кнопки,
    #  этот хендлер сработает только на тех, у которых callback_data начинается с bike_model
    @bot.callback_query_handler(func=lambda call: call.data.startswith('bike_model'))
    def reg(call):
        # получаем модель велика
        bike_model = call.data.split('|')[1]
        chat_id = call.message.chat.id
        conn = sqlite3.connect('db.db')
        cursor = conn.cursor()
        cursor.execute(f"UPDATE users SET brand = {bike_model} WHERE chat_id = {chat_id}")
        conn.commit()
        conn.close()
        bot.send_message(chat_id, f'Записали!\nИдем дальше.')
        mes = bot.send_message(chat_id, 'Введите серийный номер')
        bot.register_next_step_handler(mes, serial_number)
    
    def serial_number(message):
      ...

    Дальше идет стандартная череда функций с register_next_step_handler
    Ответ написан
    1 комментарий
  • Как передать значение res[0] в следующий шаг step_2 для создания SQL запроса?

    @twistfire92
    Python backend developer
    Выносите хендлер из функции.
    Если вы хотите через register_next_step_handler передать параметры какие-либо, передавайте их третьим и далее параметром. Пример можете посмотреть в ответах тут.
    Ответ написан
    2 комментария