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