Задать вопрос
Ответы пользователя по тегу Python
  • Как сделать скрипт для телеграмма который пишет сообщение раз в 4 часа?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    Если нужно сообщение
    от моего лица
    то через ЮЗЕРБОТА. Telethon или Pyrogram.
    Для отправки сообщений по времени библиотека schedule.
    Дока у всех этих библиотек простая, разберетесь без проблем.
    Ответ написан
    Комментировать
  • Как сделать рассылку картинок с помощью pyTelegramBotAPI?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    Картинка отправляется методом send_photo. Так же там есть параметр caption - он является описанием т.е. текст к картинке. А форматирование указываете в параметре parse_mod.
    Ответ написан
    2 комментария
  • Отправка сообщения от бота в чат?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    В вопросе есть ответ. Тебе нужно сохранять одинаковые данные для сопоставления, очень напоминает базу данных) К примеру sqlite, простая до не́льзя. Туда сохраняешь id чата и id пересланного сообщения. При получении ответа на сообщение от инженера смотришь на какой id был ответ и на какой user id его отправить.
    Ответ написан
  • Почему выдает ошибку "sqlite3.OperationalError: near "users": syntax error"?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    Ты пытаешься записать user id, а в таблице нет такого заголовка.
    Т.е. ты создал таблицу с 3 полями. Id, money и bitcoin. А потом хочешь записать куда-то user id.

    И проверь запрос на добавление данных.
    Ответ написан
    Комментировать
  • Как сделать отправку InlineKeyboardButton по три элемента из списка?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    Я не совсем понял где именно проблема с кнопками, но вот пример создания нескольких инлайн кнопок через цикл.
    marka = cursor.execute("SELECT * FROM marka").fetchall()
    keyboard = types.InlineKeyboardMarkup(row_width=1)
    button_list = [types.InlineKeyboardButton(text=f'{marka[x][1]}', callback_data=f'marka|{marka[x][0]}' ) for x in range(len(marka))]
    keyboard.add(*button_list)
    Ответ написан
  • Как к данному коду добавить кнопки телеграм бот?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    bot.send_message(message.chat.id, f"Здравствуйте, {message.from_user.username}\nВоспользуйтесь меню ниже ", parse_mode="html")
    meny = types.InlineKeyboardMarkup(row_width=1)
    cup1 = types.InlineKeyboardButton(text="Загрузить TDATA", callback_data="download")
    meny.add(cup1)
    photo = open("photo.png", "rb")
    bot.send_photo(message.chat.id, photo, " Выберите нужную функцию:", reply_markup=meny)

    В инлайн кнопки кроме текста нужно передавать callback_data которые потом в коде будешь обрабатывать.
    Ответ написан
    Комментировать
  • Как можно вывести 3 текст telebot?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    slash = f'\n'*7
    bot.send_photo(call.message.chat.id, photo1, f"sdasdsa{slash}dsds")
    Ответ написан
    Комментировать
  • Как отправить все значения пользователю из SQLITE3 | Python?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    Есть 2 варианта.
    1.
    for i in q.fetchall():
        bot.send_message(chat.id, i[0])

    2.
    l = []
    for row in q.fetchall():
        l.append(row[0])
    bot.send_message(chat.id, l)
    Ответ написан
  • Как сделать так что бы сообщение удалялось через время (использую telebot)?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    1. Чтобы удалить "через время", необходимо сохранять id сообщений.
    2. Удалить через время ты можешь библиотекой schedule.
    3. Можно еще сделать так, но тогда сообщение будет удалятся сразу по нажатию на кнопку:
    КОД
    def answer(call):
        chat_id = call.message.chat.id
        msg_id = call.message.message_id
        bot.delete_message(chat_id, msg_id)
        if call.data == 'help':
    Ответ написан
  • Как получить сообщение, к которому прикреплена Inline клавиатура?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    Самое простое решение:
    Делай print(message) и там ищи то что тебе нужно. Так ты быстрее усвоишь как устроено сообщение и что от туда можно вытащить.
    Ответ написан
  • Как получить имя отмеченного в сообщение пользователя на telebot.py?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    Распиши подробнее по шагам что ты хочешь. Имей в виду что если бот в диалоге с кем то упоминает человека, то этому человеку НЕ придет уведомление.
    Если просто "/jagajaga @bobr228" из такого формата то -
    text = "/jagajaga @bobr228"
    username = text.split('@')[1]
    Ответ написан
    Комментировать
  • Как посчитать кол-во одинаковых строк в SQLite Telebot?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    import telebot
    from telebot import types
    import sqlite3
    bot = telebot.TeleBot(TOKEN)
    link = 'https://t.me/(name_bot)'
    
    
    @bot.message_handler(commands=['start'])
    def start(message):
        msg = str(message.text).rsplit(' ', 1)
        ref = types.ReplyKeyboardMarkup(resize_keyboard=True)
        ref_btn = types.KeyboardButton('Ваша реф ссылка')
        ref_btn2 = types.KeyboardButton('Мои рефералы')
        ref.add(ref_btn, ref_btn2)
        conn = sqlite3.connect('db.db')
        cur = conn.cursor()
        user = cur.execute("SELECT id FROM users WHERE chat_id == ?", (message.chat.id,)).fetchone()
        if user:
            #Юзер уже сть в базе
            bot.send_message(message.chat.id, 'Доброго времени суток', reply_markup=ref)
        else: # Юзера пришел в первые
            if len(msg) == 2: #Проверяем есть ли реф сылка
                id_referer = msg[1]
                bot.send_message(message.chat.id, f'Вас пригласили в чат.\nID реферера: {msg[1]}', reply_markup=ref)
                cur.execute("INSERT INTO users(f_name, l_name, chat_id, referer) VALUES (?, ?, ?, ?)", (message.from_user.first_name, message.from_user.last_name, message.chat.id, id_referer))
                conn.commit()
                conn.close()
            else: # Сюда попадаем если реф ссылки нет
                cur.execute("INSERT INTO users(f_name, l_name, chat_id) VALUES (?, ?, ?)",
                            (message.from_user.first_name, message.from_user.last_name, message.chat.id))
                conn.commit()
                conn.close()
                bot.send_message(message.chat.id, 'Вы сами нашли наш чат', reply_markup=ref)
    
    
    @bot.message_handler(content_types=['text'])
    def ref(message):
        if message.text == 'Ваша реф ссылка':
            bot.send_message(message.chat.id, 'Ваша реф ссылка:')
            bot.send_message(message.chat.id, f'{link}?start={message.chat.id}')
        elif message.text == 'Мои рефералы':
            conn = sqlite3.connect('db.db')
            cur = conn.cursor()
            referal = cur.execute("SELECT * FROM users WHERE referer = ?", (message.chat.id,)).fetchall()
            bot.send_message(message.chat.id, f'Количество рефералов:\n    {len(referal)}')
    
    bot.infinity_polling()


    Структура БД:
    1. ID - int
    2. f_name - Имя, text
    3. l_name - Фамилия, text
    4. chat_id - telegram id юзера, int, уникальное значение в бд
    5. referer - telegram id реферера, int
    Ответ написан
    Комментировать
  • Телеграм бот на Пайтоне не воспринимает условия ,как решить проблему?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    Вот так должно работать, но к твоему проекту есть много вопросов.
    Пример кода
    def wiki_app(message):
        #Старайся не использовать глобальные переменные
        global wiki_found, count
        wiki_found.clear()
        answer = 'Приветствую вас в мини-приложении "Википедия"!\n' \
        'В этом приложении вы можете найти что-либо вам нужное на самом большом поисковом сервисе мира!\n' \
        'Для этого нажмите кнопку старт!'
        markup = telebot.types.InlineKeyboardMarkup(row_width=2)
        wiki_yes = telebot.types.InlineKeyboardButton(text='Да ✔', callback_data='wiki_yes')
        wiki_no = telebot.types.InlineKeyboardButton(text='Нет ✖', callback_data='wiki_no')
        markup.add(wiki_no, wiki_yes)
        #Что конкретно происходит в этой строке??
        #message.text = message.text.strip
        bot.send_message(chat_id=message.chat.id, text=answer, reply_markup=markup)
    
    @bot.callback_query_handler(func=lambda call: True)
    def wiki_app_start(call):
        chat_id = call.message.chat.id
        data = call.data
        if data == 'wiki_yes':
            bot.send_message(chat_id, text='Мини приложение запускается...')
        time.sleep(1.6)
        mes = bot.send_message(chat_id, text='Напишите сюда,то что нужно найти в Википедии!')
        #Передаем сообщение юзера в другую функцию
        bot.register_next_step_handler(mes, search) 
        elif data == 'wiki_no':
            bot.send_message(chat_id, text='Отмена поиска.')
            #game_menu(message) #Неизвестно где эта функция и что она делает
    
    def search(message):
        wiki_found = message.text
        wikipedia.set_lang('ru')
        already_fonding = wikipedia.search(wiki_found)
        bot.send_message(chat_id=message.chat.id, text=already_fonding)

    Ответ написан
    Комментировать
  • Как передать дополнительный аргумент в callback_query_handler?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    https://qna.habr.com/q/1143336

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

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    Как вариант можно создать файл config и поместить туда клавиатуру.
    markup_pictures_choice=types.ReplyKeyboardMarkup(resize_keyboard=True)
    button1 = types.KeyboardButton("Милое")
    button2 = types.KeyboardButton("Память")
    button3 = types.KeyboardButton("Назад")
    markup_pictures_choice.add(button1,button2, button3)

    И в нужном месте вызвать config.markup_pictures_choice
    Кстати не забудь сделать import config
    Ответ написан
    Комментировать
  • Как сделать меню команд в телеграм боте?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    62ab8395600f0348349769.png
    62ab83a3c4ed3700970549.png
    Потом вводишь:
    start - Запуск бота
    help - Получить помощь
    command - Описание
    Ответ написан
    Комментировать
  • Определить название города по широте и долготе?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    geo = {'format': 'json', 'lat': f'{message.location.latitude}', 'lon': f'{message.location.longitude}'}
        r = requests.get('https://nominatim.openstreetmap.org/reverse', params=geo)

    Вот пример для определения города для телеграм бота. Если будут вопросы то посмотри в сторону геокодинга Open Street Map. Он бесплатный и ответ получишь в формате json
    Ответ написан
    Комментировать
  • Как отправить сообщение всем группам по ID?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    elif(message.text=='тест'):
          some_list = cursor.execute("SELECT group_id FROM groups").fetchall() # Получаем список групп
          for z in range(len(some_list)):
            try:
                bot.send_message(some_list[z][0], txt) #txt - Текст сообщения
            except:
                pass
    Ответ написан
    Комментировать
  • Что делать выдает ошибку в TeleBot при регистрации шага?

    @TKDBOT
    Учу python. Готов к конструктивной критике.
    elif callback.data == 'ball':
        mes = bot.send_message(callback.message.chat.id, 'Введите сумму на которую вы хотите пополнить баланс')
        bot.register_next_step_handler(mes, get_symma)
            
            
    def get_symma(message):
        summa = int(message.text) + 115
        bot.send_message(message.chat.id,f'Переведите {summa} рублей')
    Ответ написан
  • Почему код правильно работает только на первой викторине?

    @TKDBOT Автор вопроса
    Учу python. Готов к конструктивной критике.
    Всем спасибо, переписал код, теперь все работает нормально.
    Если вдруг кому пригодится.
    if message.text == 'Викторина':
            # Создаем рандомное число и берем вопрос с таким id
            conn = sqlite3.connect('rustest.db')
            cursor = conn.cursor()
            cursor.execute(f"SELECT id FROM quiz")
            result1 = cursor.fetchall()
            question_id = (random.choice(result1)[0])
            cursor.execute(f"SELECT * FROM quiz WHERE id == {question_id}")
            result = cursor.fetchone()
            question = result[1]
            answer = result[2].rsplit(',', 15)
            co_id = result[3]
            # Собираем вопрос из базы и ставим ему ограничение 5 мин (300 сек)
            poll = bot.send_poll(report, f'{question}', answer, is_anonymous=False, type='quiz', correct_option_id=co_id,
                                 open_period=300)
            # Присваиваем вопросу poll_id и сохраняем в базу
            cursor.execute(f"UPDATE quiz SET poll_id == ? WHERE id == ?", (f'{poll.poll.id}', f'{question_id}'))
            conn.commit()
            # Тут отлавливаем ответ на викторину и сохраняем юзеров в базу
            @bot.poll_answer_handler()
            def pola(polle):
                conn = sqlite3.connect('rustest.db')
                cursor = conn.cursor()
                cursor.execute("INSERT INTO users (chat_id, f_name, score) VALUES (?, ?, ?)",
                               (f'{polle.user.id}', f'{polle.user.first_name}', 0))
                conn.commit()
                cursor.execute("SELECT * FROM quiz WHERE poll_id == ?", (f'{polle.poll_id}',))
                otvet = cursor.fetchone()
                # Если юзер ответил верно плюсуем ему 1 балл, если нет, просто ничего не делаем
                if otvet[3] == polle.option_ids[0]:
                    cursor.execute("SELECT score FROM users WHERE chat_id == ?", (f'{polle.user.id}',))
                    res = cursor.fetchone()
                    score = res[0] + 1
                    cursor.execute("UPDATE users SET score == ? WHERE chat_id == ?", (f'{score}', f'{polle.user.id}'))
                    conn.commit()
                    conn.close()
                else:
                    pass
    Ответ написан
    Комментировать