mirror of
https://github.com/AsgardEternal/DiscordWhitelist.git
synced 2024-12-28 08:29:13 -06:00
use /link command and hook into mysql database
This commit is contained in:
parent
7ca5e699e5
commit
66e5f0b0ca
3
.gitignore
vendored
3
.gitignore
vendored
@ -134,4 +134,5 @@ dmypy.json
|
||||
.envrc
|
||||
/test.json
|
||||
/testwl
|
||||
wlgrps/
|
||||
wlgrps/
|
||||
/upload.sh
|
||||
|
@ -14,34 +14,8 @@ class Group(commands.Cog, name="group"):
|
||||
def __init__(self, client: Bot):
|
||||
self.client = client
|
||||
|
||||
@app_commands.command()
|
||||
async def add(
|
||||
self,
|
||||
interaction: discord.Interaction,
|
||||
role: discord.Role,
|
||||
):
|
||||
if self.client.whitelistGrps.get(role.name):
|
||||
await interaction.response.send_message(
|
||||
f"**{role.name}** is already added, cannot add it again!"
|
||||
)
|
||||
return
|
||||
|
||||
log.info(f"Adding {role.name} ({role.id}) as a Whitelist role")
|
||||
await interaction.response.send_message(
|
||||
f"Adding **{role.name}** as a Whitelist role"
|
||||
)
|
||||
self.client.whitelistGrps[role.id] = config.WhitelistGroup(
|
||||
name=role.name, roleID=role.id, permissions='reserve'
|
||||
)
|
||||
|
||||
@app_commands.command()
|
||||
async def addperm(
|
||||
self,
|
||||
interaction: discord.Interaction,
|
||||
role: discord.Role,
|
||||
perms: str
|
||||
):
|
||||
if self.client.whitelistGrps.get(role.name):
|
||||
async def baseperm(self, interaction: discord.Interaction, role: discord.Role, perms: str):
|
||||
if role.id in self.client.whitelistGrps.keys():
|
||||
await interaction.response.send_message(
|
||||
f"**{role.name}** is already added, cannot add it again!"
|
||||
)
|
||||
@ -54,6 +28,35 @@ class Group(commands.Cog, name="group"):
|
||||
self.client.whitelistGrps[role.id] = config.WhitelistGroup(
|
||||
name=role.name, roleID=role.id, permissions=perms
|
||||
)
|
||||
membsup = []
|
||||
for memb in role.members:
|
||||
membsup.append(memb.id)
|
||||
memupcur = self.client.squadjs.cursor(buffered=True)
|
||||
in_params = ','.join(['%s'] * len(membsup))
|
||||
sqlstate = "SELECT * FROM DBLog_SteamUsers WHERE discordID IN (%s)" % in_params
|
||||
memupcur.execute(sqlstate, membsup)
|
||||
|
||||
udata = memupcur.fetchall()
|
||||
for data in udata:
|
||||
self.client.whitelistGrps[role.id].addMember(config.WhitelistMember(data[2], "unknown", data[0]))
|
||||
self.client.squadjs.commit()
|
||||
|
||||
@app_commands.command()
|
||||
async def add(
|
||||
self,
|
||||
interaction: discord.Interaction,
|
||||
role: discord.Role,
|
||||
):
|
||||
await self.baseperm(interaction, role, "reserve")
|
||||
|
||||
@app_commands.command()
|
||||
async def addperm(
|
||||
self,
|
||||
interaction: discord.Interaction,
|
||||
role: discord.Role,
|
||||
perms: str
|
||||
):
|
||||
await self.baseperm(interaction, role, perms)
|
||||
|
||||
@app_commands.command()
|
||||
async def remove(
|
||||
|
@ -1,5 +1,8 @@
|
||||
import discord
|
||||
import logging
|
||||
|
||||
import mysql.connector
|
||||
|
||||
from autowl import config
|
||||
from autowl.bot import Bot
|
||||
from discord.ext import commands
|
||||
@ -14,33 +17,53 @@ class Whitelist(commands.Cog):
|
||||
self.client = client
|
||||
|
||||
@app_commands.command()
|
||||
async def register(self, interaction: discord.Interaction, steam64: int):
|
||||
async def link(self, interaction: discord.Interaction, steam64: str):
|
||||
if not interaction.guild:
|
||||
await interaction.response.send_message(
|
||||
"This command must be ran within a discord server!"
|
||||
)
|
||||
return
|
||||
updatecur = self.client.squadjs.cursor(buffered=True)
|
||||
try:
|
||||
updatecur.execute(self.client.squadjs_updateDiscordID, (interaction.user.id, steam64))
|
||||
except mysql.connector.Error as err:
|
||||
log.error("MYSQL error!")
|
||||
await interaction.response.send_message("Could not find steamID!")
|
||||
for urole in interaction.user.roles:
|
||||
if urole.id in self.client.whitelistGrps.keys():
|
||||
self.client.whitelistGrps[urole.id].addMember(config.WhitelistMember(interaction.user.id, interaction.user.nick, steam64))
|
||||
self.client.squadjs.commit()
|
||||
interaction.response.send_message("SteamID is linked, roles updated.")
|
||||
|
||||
if not len(self.client.whitelistGrps.keys()):
|
||||
await interaction.response.send_message(
|
||||
"There are no Whitelist roles defined, unable to continue!"
|
||||
)
|
||||
return
|
||||
|
||||
steam64_updated = False
|
||||
for role in interaction.user.roles:
|
||||
for group in self.client.whitelistGrps:
|
||||
if role.id == self.client.whitelistGrps[group].discord_role_id:
|
||||
steam64_updated = True
|
||||
memb = config.WhitelistMember(interaction.user.id, interaction.user.name, steam64)
|
||||
self.client.whitelistGrps[group].addMember(memb)
|
||||
|
||||
if steam64_updated:
|
||||
log.info(
|
||||
f"Updated {interaction.user.name}'s ({interaction.user.id}) whitelist steam64 to {steam64}"
|
||||
)
|
||||
await interaction.response.send_message(
|
||||
f"Updated `{interaction.user.name}`'s whitelist steam64 to `{steam64}`!"
|
||||
)
|
||||
else:
|
||||
await interaction.response.send_message(f"Unable to update `{interaction.user.name}`'s whitelist steam64 as they are not in a valid Whitelisted group")
|
||||
#
|
||||
# @app_commands.command()
|
||||
# async def register(self, interaction: discord.Interaction, steam64: str):
|
||||
# if not interaction.guild:
|
||||
# await interaction.response.send_message(
|
||||
# "This command must be ran within a discord server!"
|
||||
# )
|
||||
# return
|
||||
#
|
||||
# if not len(self.client.whitelistGrps.keys()):
|
||||
# await interaction.response.send_message(
|
||||
# "There are no Whitelist roles defined, unable to continue!"
|
||||
# )
|
||||
# return
|
||||
#
|
||||
# steam64_updated = False
|
||||
# for role in interaction.user.roles:
|
||||
# for group in self.client.whitelistGrps:
|
||||
# if role.id == self.client.whitelistGrps[group].discord_role_id:
|
||||
# steam64_updated = True
|
||||
# memb = config.WhitelistMember(interaction.user.id, interaction.user.name, steam64)
|
||||
# self.client.whitelistGrps[group].addMember(memb)
|
||||
#
|
||||
# if steam64_updated:
|
||||
# log.info(
|
||||
# f"Updated {interaction.user.name}'s ({interaction.user.id}) whitelist steam64 to {steam64}"
|
||||
# )
|
||||
# await interaction.response.send_message(
|
||||
# f"Updated `{interaction.user.name}`'s whitelist steam64 to `{steam64}`!"
|
||||
# )
|
||||
# else:
|
||||
# await interaction.response.send_message(f"Unable to update `{interaction.user.name}`'s whitelist steam64 as they are not in a valid Whitelisted group")
|
||||
|
@ -6,7 +6,6 @@ from autowl.config import DiscordClientConfig
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class CustomFormat(logging.Formatter):
|
||||
grey = "\x1b[38;20m"
|
||||
yellow = "\x1b[33;20m"
|
||||
@ -51,8 +50,11 @@ def main():
|
||||
|
||||
if disToken := environ.get("DISCORD_TOKEN"):
|
||||
bot_config = DiscordClientConfig(disToken)
|
||||
if not (dbpass := environ.get("DBPASS")):
|
||||
log.error("Unable to access DBPASS in environment!")
|
||||
exit(1)
|
||||
try:
|
||||
bot.Bot(bot_config).start_bot()
|
||||
bot.Bot(bot_config, dbpass).start_bot()
|
||||
except Exception as e:
|
||||
log.critical(f"Bot exited critically, error: {e}")
|
||||
raise e
|
||||
|
@ -3,6 +3,7 @@ import os.path
|
||||
import jsonpickle
|
||||
import logging
|
||||
import discord
|
||||
import mysql.connector
|
||||
from discord.ext import commands
|
||||
from autowl import config
|
||||
|
||||
@ -10,6 +11,12 @@ log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Bot(commands.Bot):
|
||||
squadjs_updateDiscordID = ("UPDATE DBLog_SteamUsers SET discordID = %s "
|
||||
"WHERE steamID = %s")
|
||||
|
||||
squadjs_findByDiscordID = ("SELECT * FROM DBLog_SteamUsers "
|
||||
"WHERE discordID = %s")
|
||||
|
||||
whitelistGrps = {}
|
||||
|
||||
if not os.path.exists('./wlgrps'):
|
||||
@ -22,7 +29,7 @@ class Bot(commands.Bot):
|
||||
wlgrp: config.WhitelistGroup = jsonpickle.decode(file.read())
|
||||
whitelistGrps[wlgrp.discord_role_id] = wlgrp
|
||||
|
||||
def __init__(self, config: config.DiscordClientConfig):
|
||||
def __init__(self, config: config.DiscordClientConfig, mysqlpass):
|
||||
self.config = config
|
||||
intents = discord.Intents.default()
|
||||
intents.message_content = True
|
||||
@ -32,6 +39,7 @@ class Bot(commands.Bot):
|
||||
intents=intents,
|
||||
help_command=commands.DefaultHelpCommand(dm_help=True),
|
||||
)
|
||||
self.squadjs = mysql.connector.connect(user='squadjs', password=mysqlpass, host='asgard.orion-technologies.io', database='squadjs')
|
||||
|
||||
async def on_command(self, ctx: commands.Context):
|
||||
log.info(f"{ctx.author} ({ctx.author.id}) invoked command: {ctx.command.name}, {ctx.message}")
|
||||
@ -51,6 +59,11 @@ class Bot(commands.Bot):
|
||||
await self.tree.sync()
|
||||
|
||||
async def on_member_update(self, before: discord.Member, after: discord.Member):
|
||||
findcur = self.squadjs.cursor(buffered=True)
|
||||
findcur.execute(self.squadjs_findByDiscordID, [f"{after.id}"])
|
||||
if findcur.arraysize <= 0:
|
||||
return
|
||||
userdata = findcur.fetchone()
|
||||
log.info(f"Updating {after.name} ({after.id})")
|
||||
rmroles = []
|
||||
for befrole in before.roles:
|
||||
@ -61,8 +74,24 @@ class Bot(commands.Bot):
|
||||
rmroles.remove(aftrole.id)
|
||||
log.info(f"roles found to remove from {after.name}: {rmroles}")
|
||||
for rmroleid in rmroles:
|
||||
if not rmroleid in self.whitelistGrps.keys():
|
||||
continue
|
||||
self.whitelistGrps[rmroleid].delMember(before.id)
|
||||
|
||||
addroles = []
|
||||
for aftrole in after.roles:
|
||||
addroles.append(aftrole.id)
|
||||
for befrole in before.roles:
|
||||
for aftrole in after.roles:
|
||||
if aftrole.id == befrole.id:
|
||||
addroles.remove(befrole.id)
|
||||
log.info(f"roles found to add to {after.name}: {addroles}")
|
||||
for addroleid in addroles:
|
||||
if not addroleid in self.whitelistGrps.keys():
|
||||
continue
|
||||
self.whitelistGrps[addroleid].addMember(config.WhitelistMember(after.id, after.nick, userdata[0]))
|
||||
self.squadjs.commit()
|
||||
|
||||
async def setup_hook(self):
|
||||
log.info("Setting up bot")
|
||||
from autowl import Cogs
|
||||
|
Loading…
Reference in New Issue
Block a user