Compare commits

..

3 commits

Author SHA1 Message Date
Felix 558ea89722
Merge pull request #4 from henceiusegentoo/main
Added the auto-credit-system
2023-08-06 12:47:22 +02:00
nsde bc5cd7122e idk 2023-08-06 12:46:41 +02:00
henceiusegentoo c7fc1ba0fb Added the auto-credit-system 2023-08-06 02:14:46 +02:00
6 changed files with 117 additions and 3 deletions

View file

@ -18,7 +18,6 @@ bonuses:
helper: 0.4
booster: 0.5
# discord reward 0.99^lvl?
rewards:
day: 250
day: 250 # scales with level. More in ../../credit_management/settings.py

View file

@ -86,6 +86,7 @@ async def stream(
'Sorry, the API has no working keys anymore.',
'The admins have been messaged automatically.'
)
return
for k, v in target_request.get('headers', {}).items():
headers[k] = v
@ -138,6 +139,7 @@ async def stream(
chunk = f'{chunk.decode("utf8")}\n\n'
chunk = chunk.replace(os.getenv('MAGIC_WORD', 'novaOSScheckKeyword'), payload['model'])
# chunk = chunk.replace(os.getenv('MAGIC_USER_WORD', 'novaOSSuserKeyword'), user['_id'])
print(chunk)
if not chunk.strip():
send = False
@ -145,7 +147,6 @@ async def stream(
if is_chat and '{' in chunk:
data = json.loads(chunk.split('data: ')[1])
send = True
print(data)
if target_request['module'] == 'twa' and data.get('text'):
chunk = chat.create_chat_chunk(

View file

@ -0,0 +1,12 @@
async def get_all_users(client):
users = client['nova-core']['users']
return users
async def update_credits(users, settings = None):
if not settings:
users.update_many({}, {"$inc": {"credits": 250}})
else:
for key, value in settings.items():
users.update_many({'role': key}, {"$inc": {"credits": int(value)}})
print(f"Updated {key} to {value}")

51
credit_management/main.py Normal file
View file

@ -0,0 +1,51 @@
import asyncio
from settings import roles
import autocredits
import aiohttp
from dotenv import load_dotenv
import os
import pymongo
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:
print(f"Error: {e}")
return
lvlroles = [f"lvl{lvl}" for lvl in range(10, 110, 10)] + ['']
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}}))
print(f"Updated {id_} to {role}")
break
if bulk_updates:
with pymongo_client:
users.bulk_write(bulk_updates)
if __name__ == "__main__":
asyncio.run(main())

View file

@ -0,0 +1,38 @@
import nextcord
import aiohttp.web
from dotenv import load_dotenv
import os
load_dotenv()
TOKEN = os.getenv("BOT_TOKEN")
GUILD_ID = os.getenv("GUILD_ID")
client = nextcord.Client(intents=nextcord.Intents.all())
@client.event
async def on_ready():
# start webserver using aiohttp
app = aiohttp.web.Application()
async def get_roles(request):
return aiohttp.web.json_response(await get_userinfo())
app.router.add_get('/get_roles', get_roles)
runner = aiohttp.web.AppRunner(app)
await runner.setup()
site = aiohttp.web.TCPSite(runner, 'localhost', 50000)
await site.start()
print('Bot is ready')
async def get_userinfo():
guild = client.get_guild(int(GUILD_ID))
members = guild.members
user_roles = {member.id: [role.name for role in member.roles] for member in members}
return user_roles
client.run(TOKEN)

View file

@ -0,0 +1,13 @@
roles = {
'': '250',
'lvl10': '280',
'lvl20': '310',
'lvl30': '340',
'lvl40': '370',
'lvl50': '400',
'lvl60': '430',
'lvl70': '460',
'lvl80': '490',
'lvl90': '520',
'lvl100': '550',
}