Ответы пользователя по тегу Боты
  • Как отследить отправку фотографии Telegram-боту python?

    @Alexa2007
    @bot.message_handler(content_types=['photo'])
    def photo(message):
    	bot.send_message(message.chat.id, 'You send me a photo!')
    Ответ написан
    Комментировать
  • TELEBOT Почему бот не работает только на 2 устройствах?

    @Alexa2007
    Смотри... вкратце:
    ты пишешь не бота, не парсер доллара... Ты пишешь в первую очередь программу! И команда time.sleep(120) останавливает ВСЮЮЮЮЮ программу на 120секунд
    А команда while True: Зацикливает ВЮЮЮЮ программу в одном месте и кто первый нажал, тот её и заглушил, но программа не упадет и не выдаст ошибку потому что она работает! просто не правильно. Эти две строки надо убрать полностью, ну а с этим и переписать всю логику программы...
    Ответ написан
  • Как интегрировать программу на python в telegram бота?

    @Alexa2007
    Во первых советую вам разделить бота на несколько файлов и избавиться от кучи elif. Потому что, когда вы уберете pass и напишете код это будет оооооочень длинный код. Во вторых: как вариант переписать класс бота дополнив своими методами, а инфа будет гоняться через self.
    import telebot
    import time
    import threading
    API_TOKEN = '11111111111111111111111111111111'
    class my_bot(telebot.TeleBot):
        def loop_poop(self):
            while True:
                print(time.ctime())
                time.sleep(1)
    
        def start_action(self):
            thread = threading.Thread(target=self.loop_poop)
            thread.start()
    
    bot = my_bot(token = API_TOKEN, threaded=False)
    
    @bot.message_handler(commands=['start'])
    def wellcome(message):
        if message.chat.type == 'private':
            bot.send_message(message.chat.id,'Hello')
    bot.start_action()
    bot.polling()

    Но это я походу загнул. думаю вам необходимо на пальцах объяснить, что вы хотите сделать, потому как нифига не понятно
    @bot.message_handler(content_types=['text']) сделать вычисления, а потом в @bot.callback_query_handler(func=lambda call: True) эти вычисления отправлять.

    Допустим в @bot.message_handler(content_types=['text']) вы напишете х=2+2 затем в @bot.callback_query_handler(func=lambda call: True) необходимо сделать х+=2 и в консоли вы ждете 6. Я так понимаю... Если да то думаю проблема в логике... Такое возможно с использованием глобал, но прикол в том что эта глобал для всех пользователей и если три человека одновременно будут плюсовать, там будет *опа. Поэтому как вариант создавать 17854346.json для каждого пользователя и с каждым событием считывать данные
    Ответ написан
    Комментировать
  • Time.sleep() Как поставить значение пользователя?

    @Alexa2007
    А что значит
    1 лошадь
    5 лошадь

    kb2 = types.InlineKeyboardButton('1 horse', callback_data = '1h')
          kb3 = types.InlineKeyboardButton('5 horse', callback_data = '10h')


    def inline (call):
      if call.message:
        if call.data == '10':
          time.sleep(10)

    Ты так остановишь всего бота. Необходимо создать базу, а в неё записывать юзер, время старта паузы, длинна паузы.
    А вторым циклом сравнивать нынешнее время с данными из базы. И в результате небольшой математики отпрвлять сообщение юзеру из базы внужное время. И работать это будет на компе или впс. Бесплатные хостинги или не запустят код или за пару часов потратишь лимит на день.

    Вот пример двух потоков в боте:
    import telebot
    import time
    import threading
    API_TOKEN = '11111111111111111111111111111111'
    class my_bot(telebot.TeleBot):
        def loop_poop(self):
            while True:
                print(time.ctime())
                time.sleep(1)
    
        def start_action(self):
            thread = threading.Thread(target=self.loop_poop)
            thread.start()
    
    bot = my_bot(token = API_TOKEN, threaded=False)
    
    @bot.message_handler(commands=['start'])
    def wellcome(message):
        if message.chat.type == 'private':
            bot.send_message(message.chat.id,'Hello')
    bot.start_action()
    bot.polling()
    Ответ написан
  • Как добавить sqlite3 в teleboy python?

    @Alexa2007
    С базой легче(и правильнее) работать примерно вот так
    Внизу закоментирован пример того как он работает

    А бот можете тоже создать сразу с легкой масштабируемостью вот так

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

    @Alexa2007
    Когда отправляешь что-то через телегу, она сохраняет это на своих серверах.
    Отправь боту один раз видео, а потом отправляй всем ID этого видео, А телега сама всё сделает, а файл с телефона можно даже удалить...он на сервере
    @bot.message_handler(content_types=["video"])
    def confirming(message):
        if message.content_type == 'video':
            print(message.video.file_id) #ID видео файла на сервере 
            bot.send_video(message.chat.id, message.video.file_id)# Отправляешь его сам себе
        else:
            pass
    Ответ написан
    Комментировать
  • Как от имени бота телеграм написать в чат?

    @Alexa2007
    Чтобы писать от имени бота необходимо использовать токен бота. Более точно без кода вашего бота Вам никто не поможет
    Ответ написан
  • Как сделать таймер?

    @Alexa2007
    import telebot
    import time
    import threading
    API_TOKEN = '11111111111111111111111111111111'
    class my_bot(telebot.TeleBot):
        def loop_poop(self):
            while True:
                print(time.ctime())
                time.sleep(1)
    
        def start_action(self):
            thread = threading.Thread(target=self.loop_poop)
            thread.start()
    
    bot = my_bot(token = API_TOKEN, threaded=False)
    
    @bot.message_handler(commands=['start'])
    def wellcome(message):
        if message.chat.type == 'private':
            bot.send_message(message.chat.id,'Hello')
    bot.start_action()
    bot.polling()
    Ответ написан
    Комментировать
  • Как оптимизировать моего телеграм-бота, написанного на Python?

    @Alexa2007
    Ну на первый взгляд можно просто раскидать минимум на три файла:
    1.py
    import telebot
    from telebot import types
    token = bottoken
    bot = telebot.TeleBot(token)
    bot.polling()


    2.py
    #Все хендлеры
    
    @bot.message_handler(commands=['start'])
    def welcome(message):


    2.py
    #Все коллбеки без elif а нормально читаемые
    
    @bot.callback_query_handler(func=lambda call: call.data == '7')
    def seven(call):
        bot.send_message(call.message.chat.id,text = 'seven')
    
    @bot.callback_query_handler(func=lambda call: call.data == '1')
    def one(call):
        bot.send_message(call.message.chat.id,text = 'one')
    Ответ написан
    3 комментария
  • Каким образом прикрутить и вытянуть данные из БД в боте?

    @Alexa2007
    Это ответ на вопрос
    Python+mysqlite+bot telegarm не могу добавить в базу данных. Как правильно сделать?

    Также, если не ошибаюсь edit_message_text работает с сообщениями которым не более 24 часов
    Еще не пробовал на своём магазине, но есть шанс, что если пользователь нажмет кнопку "далее" бот просто рухнет
    И еще необходимо хранить позицию каждого пользователя, где он находится, то есть:
    нажал кнопку "Куртки"
    бот в базу пишет (раздел куртки позиция 1)
    нажал кнопку "далее"
    бот читает из базы раздел, и позицию, прибавляет или вычитает 1, проверяет чтобы число не было 0 или -1 или больше чем кол-во позиций иначе он опять таки рухнет
    Короче я как-то это сделал, но из-за того что это в результате будет мусорко-переписка, думаю такая реализация магазина не зайдет

    Чтобы голова не лопнула от кучи elif
    Раздели на несколько хендлеров
    @bot.callback_query_handler(func=lambda call: call.data == '7')
    def seven(call):
        bot.send_message(call.message.chat.id,text = 'seven')
    
    @bot.callback_query_handler(func=lambda call: call.data == '1')
    def one(call):
        bot.send_message(call.message.chat.id,text = 'one')
    Ответ написан
    3 комментария
  • Python+mysqlite+bot telegarm не могу добавить в базу данных. Как правильно сделать?

    @Alexa2007
    #Создай отдельный файл с классом типа этого
    # импортируй from my_baza_class import base as b
    #В своём коде вставляй где хочешь
    #Пример внизу
    #
    import sqlite3
    
    
    class base:
        def __init__(self,table):
            self.table = table
            self.conn = sqlite3.connect("mydatabase.db")
            self.cursor = self.conn.cursor()
            print("Open DB")
    
    
        def __del__(self):
            print("CloseDB")
    
    
        def insert(self, full_name,last_name):
            sql = f"INSERT INTO {self.table} VALUES (null,'{full_name}', '{last_name}') "
            self.cursor.execute(sql)
            self.conn.commit()
            print('INSERT DONE')
    
    
        def select(self):
            res=[]
            sql = f"SELECT * FROM {self.table}"
            for _ in self.cursor.execute(sql):
                res.append(str(_[0]) +' '+ str(_[1])+' '+str(_[2]))
            print('SELECT DONE')
            return res
    
        def create_table(self):
            try:
                self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS {self.table}
                          (id integer primary key AUTOINCREMENT, full_name text, last_name text)
                       """)
                self.conn.commit()
                print('CREATE TABLE DONE')
            except Exception as e:
                print('ERROR')
    
    
    
    
    
    #b = base('users')
    #b.create_table()
    #for x in range(1,4):
    #    b.insert(f'full_name{x}',f'last_name{x}')
    
    #x = b.select()
    #print(x)
    Ответ написан
    1 комментарий