fix: бот не стартовал + падение в get_user_stats + handle_central_bank_cmd не отвечал
- economy_background_tasks() была вставлена в середину main(), из-за чего dp.startup.register и asyncio.run(dp.start_polling) оказались мёртвым кодом внутри while True — бот никогда не поднимался - двойной fetchone() в get_user_stats (тот же баг что в PR #34, но в другом месте) - conn.close() вызывался до запросов за активностью, потом ещё раз — ProgrammingError - handle_central_bank_cmd строил текст но не делал await message.answer() Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
78b42691b7
commit
70e7d23064
2 changed files with 31 additions and 39 deletions
|
|
@ -546,28 +546,27 @@ class EconomyManager:
|
|||
|
||||
# Баланс
|
||||
cursor.execute('SELECT balance FROM user_balances WHERE user_id = ?', (user_id,))
|
||||
balance = cursor.fetchone()[0] if cursor.fetchone() else 0.0
|
||||
|
||||
row = cursor.fetchone()
|
||||
balance = row[0] if row else 0.0
|
||||
|
||||
# Активные вклады
|
||||
cursor.execute('SELECT COUNT(*), SUM(amount) FROM deposits WHERE user_id = ? AND is_active = 1', (user_id,))
|
||||
deposits = cursor.fetchone()
|
||||
|
||||
|
||||
# Активные кредиты
|
||||
cursor.execute('SELECT COUNT(*), SUM(amount) FROM loans WHERE user_id = ? AND is_repaid = 0', (user_id,))
|
||||
loans = cursor.fetchone()
|
||||
|
||||
conn.close()
|
||||
|
||||
|
||||
# Получаем статистику сообщений за сегодня
|
||||
today = datetime.now().strftime('%Y-%m-%d')
|
||||
cursor.execute('SELECT message_count FROM daily_activity WHERE user_id = ? AND activity_date = ?', (user_id, today))
|
||||
today_messages = cursor.fetchone()
|
||||
|
||||
|
||||
# Получаем статистику сообщений за вчера
|
||||
yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')
|
||||
cursor.execute('SELECT message_count FROM daily_activity WHERE user_id = ? AND activity_date = ?', (user_id, yesterday))
|
||||
yesterday_messages = cursor.fetchone()
|
||||
|
||||
|
||||
conn.close()
|
||||
|
||||
return {
|
||||
|
|
|
|||
55
main.py
55
main.py
|
|
@ -1446,6 +1446,7 @@ async def handle_central_bank_cmd(message: Message):
|
|||
/cb_stats - краткая статистика
|
||||
/cb_rules - правила работы ЦБ
|
||||
"""
|
||||
await message.answer(text, parse_mode=None)
|
||||
|
||||
async def handle_cb_stats_cmd(message: Message):
|
||||
"""Статистика ЦБ для всех пользователей"""
|
||||
|
|
@ -1782,37 +1783,6 @@ def main():
|
|||
# Запуск фоновых задач экономики
|
||||
asyncio.create_task(economy_background_tasks())
|
||||
|
||||
async def economy_background_tasks():
|
||||
"""Фоновые задачи для экономики"""
|
||||
while True:
|
||||
try:
|
||||
# Проверяем текущее время по МСК
|
||||
from datetime import datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
moscow_time = datetime.now(ZoneInfo("Europe/Moscow"))
|
||||
current_hour = moscow_time.hour
|
||||
current_minute = moscow_time.minute
|
||||
|
||||
# Ежедневный сбор налогов (каждый час проверяем)
|
||||
await asyncio.to_thread(economy.collect_daily_taxes)
|
||||
|
||||
# Регулирование инфляции (раз в день)
|
||||
await asyncio.to_thread(economy.regulate_inflation)
|
||||
|
||||
# Выплаты за активность в 00:00 по МСК
|
||||
if current_hour == 0 and current_minute == 0:
|
||||
users_paid = await asyncio.to_thread(economy.pay_daily_activity_rewards)
|
||||
if users_paid > 0:
|
||||
logger.info(f"Activity rewards paid to {users_paid} users at 00:00 MSK")
|
||||
|
||||
logger.info(f"Economy background tasks completed at {moscow_time.strftime('%H:%M:%S MSK')}")
|
||||
except Exception as e:
|
||||
logger.exception(f"Economy background task failed: {e}")
|
||||
|
||||
# Ждём 1 минуту до следующей проверки (для точности в 00:00)
|
||||
await asyncio.sleep(60)
|
||||
|
||||
dp.startup.register(on_startup)
|
||||
|
||||
async def start_settle(bot: Bot):
|
||||
|
|
@ -1822,5 +1792,28 @@ async def economy_background_tasks():
|
|||
logger.info("Бот запущен...")
|
||||
asyncio.run(dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types()))
|
||||
|
||||
|
||||
async def economy_background_tasks():
|
||||
"""Фоновые задачи для экономики"""
|
||||
while True:
|
||||
try:
|
||||
moscow_time = datetime.now(ZoneInfo("Europe/Moscow"))
|
||||
current_hour = moscow_time.hour
|
||||
current_minute = moscow_time.minute
|
||||
|
||||
await asyncio.to_thread(economy.collect_daily_taxes)
|
||||
await asyncio.to_thread(economy.regulate_inflation)
|
||||
|
||||
if current_hour == 0 and current_minute == 0:
|
||||
users_paid = await asyncio.to_thread(economy.pay_daily_activity_rewards)
|
||||
if users_paid > 0:
|
||||
logger.info(f"Activity rewards paid to {users_paid} users at 00:00 MSK")
|
||||
|
||||
logger.info(f"Economy background tasks completed at {moscow_time.strftime('%H:%M:%S MSK')}")
|
||||
except Exception as e:
|
||||
logger.exception(f"Economy background task failed: {e}")
|
||||
|
||||
await asyncio.sleep(60)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
|
|||
Loading…
Reference in a new issue