Задать вопрос
  • Почему не сохраняет данные в переменную в telebot?

    Lord_of_Rings
    @Lord_of_Rings Куратор тега Python
    Дунадан - северный странник. Злой, но очень добрый
    По-хорошему, вам надо озадачиться изучением такой вещи, как БД (база данных). Но если уж очень лень, то здесь как минимум нужен словарь.

    Что-то типа этого:
    Осторожно! Писать самому было лень, код сгенерирован нейросетью
    import telebot
    from telebot import types
    import time
    import works  # Предполагается, что works теперь словарь
    
    token = 'YOUR_TOKEN'
    bot = telebot.TeleBot(token)
    
    # Храним состояние и данные пользователей
    user_data = {}
    
    MAIN_MENU = 0
    FIRST_WORK_MENU = 1
    ADD_WORK_MENU = 2
    
    @bot.message_handler(commands=['start'])
    def start(message):
        user_id = message.from_user.id
        # Инициализация данных пользователя при старте
        if user_id not in user_data:
            user_data[user_id] = {
                'state': MAIN_MENU,
                'count_price': 0,
                'count_all': 0
            }
        
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        markup.add(" Главное меню", "ℹ️ Информация", "ℹ️️ начать подсчет зарплаты",
                   "ℹ️️ итог за месяц", "ℹ️ итог за все время")
        
        bot.send_message(message.chat.id, "Добро пожаловать! Выберите пункт меню:", reply_markup=markup)
    
    @bot.message_handler(content_types=['text'])
    def handle_text(message):
        user_id = message.from_user.id
        # Инициализируем данные, если пользователь новый
        if user_id not in user_data:
            user_data[user_id] = {
                'state': MAIN_MENU,
                'count_price': 0,
                'count_all': 0
            }
        
        current_user = user_data[user_id]
    
        if message.text == " Главное меню":
            # Код создания главного меню...
        
        elif message.text == "ℹ️️ начать подсчет зарплаты":
            # Код перехода в меню подсчета...
        
        elif message.text == "добавление выполненых работ":
            # Код меню добавления работ...
        
        elif message.text == "ℹ️️ итог за месяц":
            bot.send_message(message.chat.id, f'Сумма за месяц: {current_user["count_price"]} руб.')
        
        elif message.text == "ℹ️ итог за все время":
            bot.send_message(message.chat.id, f'Сумма за все время: {current_user["count_all"]} руб.')
        
        elif message.text == "обнуление месяца/сохранение итогов":
            current_user['count_all'] += current_user['count_price']
            current_user['count_price'] = 0
            bot.send_message(message.chat.id, 
                           f'Месяц обнулен. Текущий месяц: 0 руб.\n'
                           f'Итог за все время: {current_user["count_all"]} руб.')
        
        elif message.text in works:  # Предполагается, что works - это словарь
            price = works[message.text]
            current_user['count_price'] += price
            bot.send_message(message.chat.id,
                           f'{message.text}: {price} руб.\n'
                           f'Итог за месяц: {current_user["count_price"]} руб.')
    
    bot.polling(none_stop=True)
    Ответ написан
    Комментировать
  • Крашится Kivy приложение на Android. Что делать?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    1. В коде у вас kivy.require('2.0.0'), а в конфиге kivy==2.1.0. Вас это не смущает?
    2. Удалите ваш конфиг, создайте новый через buildozer init и ничего не меняя запустите сборку. Потом попробуйте запустить.
    3. Если предыдущие шаги не помогут, то вам надо осваивать adb и buildozer -v android debug deploy run logcat Гугль и доки вам в помощь

    P. S.
    spoiler
    @Dmitriy_Semenov,
    1. Вместо
    if platform == 'android':
        storage_path = '/sdcard/fittrackpro'
    else:
        storage_path = os.path.dirname(os.path.abspath(__file__))

    Используйте
    storage_path = App.get_running_app().user_data_dir
    2. Удалите Window.size = (360, 640)
    3. Вместо
    if not os.path.exists(storage_path):
        os.makedirs(storage_path)

    Используйте
    if not os.path.exists(storage_path):
        os.makedirs(storage_path, exist_ok=True)
    (или вообще уберите, и так должно работать)
    4. После импортов добавьте
    try:
        from android.permissions import request_permissions, Permission
    
        if platform == 'android':
            request_permissions([
            Permission.WRITE_EXTERNAL_STORAGE,
            Permission.READ_EXTERNAL_STORAGE,
            Permission.INTERNET
            ])
    except: pass


    Ну и конечно использовать print в графическом приложении - это глупость. Пользователь всё равно ничего не увидит
    Ответ написан
  • Как узнать дату регистрации в вк с помощью питона?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Никак
    Ответ написан
    Комментировать
  • PyInstaller как открыть GUI?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Соглашусь с dim5x Но может быть вы имеете в виду параметр сборки проекта? Тогда это --windowed
    Ответ написан
    Комментировать
  • Как мне отписаться от профильного хаба?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Ответ написан
    Комментировать
  • Какой антивирус для Линукс сейчас использовать в РФ?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Dr.Web, Kaspersky
    Ответ написан
    Комментировать
  • Как сформировать десктопное приложение на питоне?

    Lord_of_Rings
    @Lord_of_Rings Куратор тега Python
    Дунадан - северный странник. Злой, но очень добрый
    PyInstaller для новичков самое то.
    1. pip install pyinstaller
    2. pyinstaller -F /path/to/yourscript.py
    3. Profit
    Ответ написан
    2 комментария
  • Можно ли стать бекэндером без фронтенда?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Конечно можно. Бэкенд+фронтенд это уже фуллстэк. Но самые примитивные и базовые знания лучше все-таки иметь.
    Ответ написан
    Комментировать
  • Книга по развитию в IT?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Программист-прагматик. Эндрю Хант
    Ответ написан
    Комментировать
  • Ошибка при нажатии кнопки "Next", (Instagram, Selenium) Как исправить?

    Lord_of_Rings
    @Lord_of_Rings Куратор тега Python
    Дунадан - северный странник. Злой, но очень добрый
    Дебаг, дебаг и ещё раз дебаг
    Ответ написан
    Комментировать
  • Почему self интерпретируется как None в ходе инициализации __init__?

    Lord_of_Rings
    @Lord_of_Rings Куратор тега Python
    Дунадан - северный странник. Злой, но очень добрый
    Это артефакт отладки, с самим объектом ничего не происходит. Строка "None" появляется в выводе, но это не означает, что сам объект становится None
    Ответ написан
    1 комментарий
  • Как исправить ошибку тг бота?

    Lord_of_Rings
    @Lord_of_Rings Куратор тега Python
    Дунадан - северный странник. Злой, но очень добрый
    YouTube ужесточил политику в отношении пользователей, которые скачивают видео "без разрешения". Самый правильный вариант - это генерация poToken, но это достаточно трудоёмкое занятие. Сейчас разработчик и команда неравнодушных пользователей (в числе которых и я) думают над решением этой проблемы.
    Пока нашли такое решение-костыль:
    1. Заходите в папку где хранится pytubefix. Обычно это
    C:\Users\<User>\AppData\Local\Programs\Python<version>\Lib\site-packages\pytubefix

    2. Идете в __main__.py
    3. Там находите функцию check_availability и убираете (просто удаляете) вот этот кусок кода:
    elif reason == (
        'Sign in to confirm you’re not a bot'
    ):
        raise exceptions.BotDetection(video_id=self.video_id)

    Все должно заработать
    Ответ написан
    2 комментария
  • Eсть ли сайт, на котором можно программировать на Python онлайн совместно?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Да, конечно, полно
    Ответ написан
    Комментировать
  • Ошибка в коде python, бот для тг канала, в чем проблема?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Вам надо использовать один и тот же цикл событий, а не закрывать его. В логах вообще-то это написано
    ...
    def scheduled_task():
        loop = asyncio.get_event_loop()
        loop.run_until_complete(update_message())
    
    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        loop.run_until_complete(create_initial_message())
    
        scheduler = BackgroundScheduler()
        scheduler.add_job(scheduled_task, 'interval', seconds=UPDATE_INTERVAL)
        scheduler.start()
    
        try:
            while True:
                pass
        except (KeyboardInterrupt, SystemExit):
            scheduler.shutdown()
    Ответ написан
  • Как решить проблему с таймзонами при нахождении дельты?

    Lord_of_Rings
    @Lord_of_Rings Куратор тега Python
    Дунадан - северный странник. Злой, но очень добрый
    В чём смысл метода set_time_zone? У вас время уже идёт в gmt (utc) и это смещение не нужно. Я бы сделал так:
    def set_server_time(self, resp):
            data = resp.headers['Date']
            date_format = "%a, %d %b %Y %H:%M:%S GMT"
            self.server_time = datetime.strptime(data, date_format).replace(tzinfo=timezone.utc)
    А set_time_zone просто выкинул бы
    Ответ написан
    1 комментарий
  • Какой есть нормальный рабочий opds-менеджер для андроид 14?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Alreader X Pro. Самая лучшая читалка. Поддерживает Opds. Скачивать лучше с сайта https://alreader.com/downloads/OTHER/AlReaderXPro.apk а не из google play, так как в нём версия хуже, а то, что по ссылке они пишут специально для onyx boox
    Ответ написан
    2 комментария
  • Как в телеграмм сделать кнопку оставить заявку, чтобы приходило менеджеру?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Бот ожидает ввод данных после нажатия кнопки "Оставить заявку". Если нажать другую кнопку, бот обрабатывает это как продолжение ввода заявки.
    Ответ написан
  • Почему Copilot не доступен в VSCode?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    IP, язык системы и пр. - всё указывает на вашу локацию, а так как russia забанена в copilot, то соответственно он и не работает
    Ответ написан
    6 комментариев
  • Есть ли аналог Гугл Презентация?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    Zoom Workplace
    Ответ написан
    Комментировать
  • Kali Linux - KDE Plasma нет рабочего стола. Что делать?

    Lord_of_Rings
    @Lord_of_Rings
    Дунадан - северный странник. Злой, но очень добрый
    1. Логи. Смотрели?
    2. Попробуйте перезапустить
    kquitapp5 plasmashell
    kstart5 plasmashell

    3. Переустановите
    sudo apt update
    sudo apt install --reinstall kde-plasma-desktop
    Ответ написан
    Комментировать