|
|
@@ -0,0 +1,156 @@
|
|
|
+import os
|
|
|
+from dotenv import load_dotenv
|
|
|
+import discord
|
|
|
+from discord.ext import commands, tasks
|
|
|
+from discord.commands import Option
|
|
|
+from discord.commands import slash_command
|
|
|
+import configparser
|
|
|
+import time
|
|
|
+import mysql.connector
|
|
|
+
|
|
|
+
|
|
|
+## Note: to use this script on a other server you need to change the SQL querys. It is deactivatable in the config.cfg file.
|
|
|
+
|
|
|
+
|
|
|
+class changedcname(commands.Cog):
|
|
|
+ def __init__(self, bot: discord.Bot):
|
|
|
+ self.bot = bot
|
|
|
+
|
|
|
+ def _load_config(self):
|
|
|
+ config = configparser.ConfigParser()
|
|
|
+ configFilePath = r'config.cfg'
|
|
|
+ config.read(configFilePath)
|
|
|
+ return config
|
|
|
+
|
|
|
+
|
|
|
+ @commands.Cog.listener()
|
|
|
+ async def on_ready(self):
|
|
|
+ self.check_inactive_members.start()
|
|
|
+
|
|
|
+ @tasks.loop(minutes=15)
|
|
|
+ async def check_inactive_members(self):
|
|
|
+ config = self._load_config()
|
|
|
+ enable_change_dc_name = config.getboolean("Role Management","nable_change_dc_name")
|
|
|
+ if not enable_change_dc_name:
|
|
|
+ return # Exit the function if the feature is disabled in the config
|
|
|
+
|
|
|
+
|
|
|
+ #Load .env file for the gameserver database
|
|
|
+ dbhost = os.getenv("HOST2")
|
|
|
+ if dbhost is None:
|
|
|
+ raise ValueError("HOST2 not found in .env file")
|
|
|
+ dbname = os.getenv("NAME2")
|
|
|
+ if dbname is None:
|
|
|
+ raise ValueError("NAME2 not found in .env file")
|
|
|
+ dbpsswd = os.getenv("PASSWORD2")
|
|
|
+ if dbpsswd is None:
|
|
|
+ raise ValueError("PASSWORD2 not found in .env file")
|
|
|
+ dbdb = os.getenv("DATABASE2")
|
|
|
+ if dbdb is None:
|
|
|
+ raise ValueError("DATABASE2 not found in .env file")
|
|
|
+
|
|
|
+
|
|
|
+ #Database initialization
|
|
|
+ conn = mysql.connector.connect(
|
|
|
+ host=dbhost,
|
|
|
+ user=dbname,
|
|
|
+ password=dbpsswd,
|
|
|
+ charset='utf8mb4',
|
|
|
+ collation='utf8mb4_unicode_ci'
|
|
|
+ )
|
|
|
+ cursor = conn.cursor()
|
|
|
+ conn.database = dbdb
|
|
|
+
|
|
|
+
|
|
|
+ #needed arrays
|
|
|
+ badgenr = []
|
|
|
+ charinfo = []
|
|
|
+ discord_raw = []
|
|
|
+ user_id = []
|
|
|
+ users = []
|
|
|
+ firstname = []
|
|
|
+ lastname = []
|
|
|
+
|
|
|
+ #get information from database
|
|
|
+ cursor.execute("""
|
|
|
+ SELECT ny_groups_meta.internal_identifier FROM ny_groups_meta,
|
|
|
+ users, players WHERE ny_groups_meta.character_identifier=players.citizenid AND
|
|
|
+ players.userId=users.userId
|
|
|
+ """)
|
|
|
+ for internal_identifier in cursor.fetchall():
|
|
|
+ badgenr.append((internal_identifier))
|
|
|
+ cursor.execute("""
|
|
|
+ SELECT players.charinfo FROM ny_groups_meta,
|
|
|
+ users, players WHERE ny_groups_meta.character_identifier=players.citizenid AND
|
|
|
+ players.userId=users.userId
|
|
|
+ """)
|
|
|
+ for charinfo in cursor.fetchall():
|
|
|
+ charinfo.append((charinfo))
|
|
|
+ cursor.execute("""
|
|
|
+ SELECT users.discord FROM ny_groups_meta,
|
|
|
+ users, players WHERE ny_groups_meta.character_identifier=players.citizenid AND
|
|
|
+ players.userId=users.userId
|
|
|
+ """)
|
|
|
+ for discord in cursor.fetchall():
|
|
|
+ discord_raw.append((discord))
|
|
|
+
|
|
|
+
|
|
|
+ #get users to the discordIDs
|
|
|
+ for discord in discord_raw:
|
|
|
+ discord_id = discord_raw.split(":")
|
|
|
+ for i in range(len(discord_raw)):
|
|
|
+ if discord_raw[i].isdigit():
|
|
|
+ user_id = int(discord_raw[i])
|
|
|
+ user = self.bot.get_user(user_id)
|
|
|
+ users.append(user)
|
|
|
+
|
|
|
+ #check on dublicates
|
|
|
+ for i in range(len(users)):
|
|
|
+ for j in range(i + 1, len(users)):
|
|
|
+ if users[i] == users[j]:
|
|
|
+ print(f"Duplicate user found: {users[i].name} (ID: {users[i].id})")
|
|
|
+ users.pop(j)
|
|
|
+ charinfo.pop(j)
|
|
|
+ badgenr.remove(badgenr[j])
|
|
|
+ users.pop(i)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ #get charname
|
|
|
+ for charinfo in charinfo:
|
|
|
+ charinfo_split = charinfo.split(",")
|
|
|
+ for i in range(len(charinfo_split)):
|
|
|
+ if '"firstname"' in charinfo_split[i]:
|
|
|
+ firstname.append(charinfo_split[i+1])
|
|
|
+ if '"lastname"' in charinfo_split[i]:
|
|
|
+ lastname.append(charinfo_split[i+1])
|
|
|
+
|
|
|
+
|
|
|
+ #change username
|
|
|
+ for i in range(len(users)):
|
|
|
+ nick = f"[{badgenr[i]}] {firstname[i]} {lastname[i]}"
|
|
|
+ try:
|
|
|
+ await users[i].edit(nick=nick)
|
|
|
+ except Exception as e:
|
|
|
+ print(f"Failed to change nickname for {users[i].name}: {e}")
|
|
|
+
|
|
|
+
|
|
|
+ cursor.close()
|
|
|
+ conn.close()
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+def setup(bot: discord.Bot):
|
|
|
+ bot.add_cog(changedcname(bot))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|