Задать вопрос
  • Как обслуживать юзеров по очереди телебот?

    @nozzy
    Symfony, Laravel, SQL, Python, Telegram
    @bot.message_handler(commands=['start'])
    def start(message):
        msg = bot.send_message(message.chat.id,'Здравствуйте, отправьте адреса кошельков что бы между адресами был пробел(запятая и перевод строки не подходят),')
        bot.register_next_step_handler(msg, sender)
    
    @bot.message_handler(func=lambda m: True)
    def sender(message):
        urls_list = []
        price_list = []
        user_id = message.from_user.id
        number = (len(message.text.split(' ')))
        for count in range(0,number):
            addresses = message.text.split(' ')[count]
            response = requests.get(url = f'https://api.debank.com/hi/user/info?id={addresses}', headers=HEADERS).text
            price = response.split('"usd_value":')[1].split(',')[0].split('.')[0]
            print(price)
    
            urls_list.append('https://debank.com/profile/' + addresses)
            price_list.append(price)
    
            df = pd.DataFrame ({'urls':urls_list,'amounts':price_list})
            df.to_excel(f'D:\PYTHON\DeBank\{user_id}.xlsx', sheet_name='Info', index=False)
        
    
        file = open(f'D:\PYTHON\DeBank\{user_id}.xlsx','rb')
        bot.send_document(message.chat.id,file)
        #Здесь удали файл 'D:\PYTHON\DeBank\{user_id}.xlsx'
    Ответ написан
    Комментировать
  • Как обслуживать юзеров по очереди телебот?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    У тебя глобальные urls_list, price_list. Перемести их в функцию sender, они всё равно при каждом её вызове должны инициализироваться заново. Именно это и вызывает сейчас проблемы.
    Ответ написан
    Комментировать
  • Как обслуживать юзеров по очереди телебот?

    Vindicar
    @Vindicar
    RTFM!
    global user_id
    Ну как бы вот виновник. Глобальные переменные. Они общие на всего бота и на всех пользователей. Если тебе нужно дифференцировать пользователей - делай это сам.
    Делай хранилище "ключ-значение", где ключ - ID пользователя, значение - хранимые для этого пользователя данные. При обработке сообщения читай ID пользователя, доставай из хранилища данные, и уже сообразно им обрабатывай сообщение.
    Таким хранилищем может быть простой словарь (если не нужно сохранять состояние между перезапусками бота), БД или ещё что.

    Не знаю, есть ли в telebot реализация Finite State Machine, но обычно для реализации сценариев используют её. Идея та же - для каждого юзера храним его текущее состояние (шаг в сценарии) и ассоциированные с ним данные.
    Ответ написан
    2 комментария
  • Как обслуживать юзеров по очереди телебот?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Проблема в этой строке:
    global user_id
    Вам надо построить код так, чтобы не использовать global.
    Ответ написан
    2 комментария