This repository has been archived on 2025-01-28. You can view files and clone it, but cannot push or open issues or pull requests.
natsuko/cogs/timeble.py

54 lines
2.7 KiB
Python
Raw Permalink Normal View History

2023-05-03 19:53:01 +03:00
from bot import db
from schedule import every, clear, run_pending
import asyncio
from datetime import datetime, timedelta
from loguru import logger
daysoftheweek = ("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday")
2023-05-16 16:34:50 +03:00
async def save_activity():
2023-05-03 19:53:01 +03:00
day = (datetime.now()-timedelta(1)).weekday()
2023-05-16 16:34:50 +03:00
async for data in db.history.find({"type": "server"}):
await db.history.update_one(
2023-05-03 19:53:01 +03:00
{"type": "server", "id": data['id']},
{
"$push":
{f"avarage.{i}": data['current'][str(i)] for i in range(24)} | {f"history.{daysoftheweek[day]}.{i}": data['current'][str(i)] for i in range(24)},
2023-05-03 19:53:01 +03:00
"$set":
{f'yesterday.{i}': data['current'][str(i)] for i in range(24)} | {f"current.{i}": 0 for i in range(24)}
2023-05-03 19:53:01 +03:00
}
)
2023-05-16 16:34:50 +03:00
async def db_sync_hour():
async for member in db.members.find():
if member['history']['hour'][list(member['history']['hour'].keys())[-1]] != member['exp']:
await db.members.update_one({"_id": member["_id"]}, {"$set": {f"history.hour.{int(datetime.now().timestamp())}": member["exp"]}})
if 'guild_stat' in member.keys():
for guild in member["guild_stat"].keys():
if member['guild_stat'][guild]['history']['hour'][list(member['guild_stat'][guild]['history']['hour'].keys())[-1]] != member['guild_stat'][guild]['exp']:
await db.members.update_one({"_id": member["_id"]}, {"$set": {f"guild_stat.{guild}.history.hour.{int(datetime.now().timestamp())}": member["guild_stat"][guild]["exp"]}})
2023-05-03 19:53:01 +03:00
2023-05-16 16:34:50 +03:00
async def db_sync_day():
2023-05-03 19:53:01 +03:00
logger.info("Регистрация за день")
2023-05-16 16:34:50 +03:00
async for member in db.members.find():
await db.members.update_one({"_id": member["_id"]}, {"$set": {f"history.day.{int(datetime.now().timestamp())}": member["exp"]}})
2023-05-03 19:53:01 +03:00
for guild in member["guild_stat"].keys():
2023-05-16 16:34:50 +03:00
await db.members.update_one({"_id": member["_id"]}, {"$set": {f"guild_stat.{guild}.history.day.{int(datetime.now().timestamp())}": member["guild_stat"][guild]["exp"]}})
2023-05-03 19:53:01 +03:00
logger.info("Регистрация завершена")
# await self.bot.get_user(self.bot.owner_id).send("Завершено за день????")
2023-05-16 16:34:50 +03:00
async def main(bot):
2023-05-03 19:53:01 +03:00
clear()
2023-05-16 16:34:50 +03:00
every().day.at('00:00:00').do(lambda: asyncio.run_coroutine_threadsafe(save_activity(), bot.loop))
every().hours.at("00:00").do(lambda: asyncio.run_coroutine_threadsafe(db_sync_hour(), bot.loop))
# every().day.at("00:00:00").do(lambda: asyncio.run_coroutine_threadsafe(db_sync_day(), bot.loop))
2023-05-03 19:53:01 +03:00
while True:
run_pending()
await asyncio.sleep(1)
2023-05-16 16:34:50 +03:00
async def setup(bot):
asyncio.create_task(main(bot))