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.require('2.0.0')
, а в конфиге kivy==2.1.0
. Вас это не смущает?buildozer init
и ничего не меняя запустите сборку. Потом попробуйте запустить.buildozer -v android debug deploy run logcat
Гугль и доки вам в помощь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
Window.size = (360, 640)
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)
(или вообще уберите, и так должно работать)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
pip install pyinstaller
pyinstaller -F /path/to/yourscript.py
C:\Users\<User>\AppData\Local\Programs\Python<version>\Lib\site-packages\pytubefix
__main__.py
check_availability
и убираете (просто удаляете) вот этот кусок кода:elif reason == (
'Sign in to confirm you’re not a bot'
):
raise exceptions.BotDetection(video_id=self.video_id)
...
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()
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 просто выкинул бы