nova-api/rewardsystem/main.py

54 lines
1.5 KiB
Python
Raw Normal View History

2023-08-06 02:14:46 +02:00
import asyncio
import autocredits
import aiohttp
import os
import pymongo
2023-08-06 21:42:07 +02:00
from settings import roles
from dotenv import load_dotenv
2023-08-06 02:14:46 +02:00
load_dotenv()
CONNECTION_STRING = os.getenv("CONNECTION_STRING")
pymongo_client = pymongo.MongoClient(CONNECTION_STRING)
async def main():
users = await autocredits.get_all_users(pymongo_client)
await update_roles(users)
await autocredits.update_credits(users, roles)
async def update_roles(users):
async with aiohttp.ClientSession() as session:
try:
async with session.get('http://localhost:50000/get_roles') as response:
data = await response.json()
except aiohttp.ClientError as e:
2023-08-06 21:42:07 +02:00
raise ValueError('Could not get roles') from exc
lvlroles = [f'lvl{lvl}' for lvl in range(10, 110, 10)] + ['']
2023-08-06 02:14:46 +02:00
discord_users = data
users = await autocredits.get_all_users(pymongo_client)
filtered_users = users.find({'role': {'$in': lvlroles}})
bulk_updates = []
for user in filtered_users:
discord = str(user['auth']['discord'])
for id_, roles in discord_users.items():
if id_ == discord:
for role in lvlroles:
if role in roles:
bulk_updates.append(pymongo.UpdateOne({'auth.discord': int(discord)}, {'$set': {'role': role}}))
2023-08-06 21:42:07 +02:00
print(f'Updated {id_} to {role}')
2023-08-06 02:14:46 +02:00
break
2023-08-06 21:42:07 +02:00
2023-08-06 02:14:46 +02:00
if bulk_updates:
with pymongo_client:
users.bulk_write(bulk_updates)
if __name__ == "__main__":
2023-08-06 21:42:07 +02:00
asyncio.run(main())