Skip to content
This repository was archived by the owner on Oct 14, 2024. It is now read-only.

Commit fa0da11

Browse files
committed
Moved guilds to MongoDB-- SQL no longer used
SQL and local json files are no longer used. GuildManager is now fully switched to accessing MongoDB
1 parent ee7c98f commit fa0da11

File tree

5 files changed

+149
-416
lines changed

5 files changed

+149
-416
lines changed

EU4Bot.py

+35-54
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,9 @@
99
from typing import Any, Dict, List, Optional, Tuple, Union
1010

1111
import aiohttp
12-
from aiohttp.streams import StreamReader
1312
import cppimport
1413
import discord
1514
from discord.errors import DiscordException
16-
import psycopg2
1715
from dotenv import load_dotenv
1816
from PIL import Image, ImageDraw, ImageFont
1917

@@ -41,14 +39,7 @@
4139
intents.members = True
4240
client = discord.Client(intents=intents)
4341
session: aiohttp.ClientSession = None
44-
# Load database if it exists; if not then conn = None and methods will open a json file.
45-
try:
46-
DATABASEURL = os.getenv("DATABASE_URL")
47-
conn: psycopg2.extensions.connection = psycopg2.connect(
48-
DATABASEURL, sslmode='require')
49-
conn.autocommit = True
50-
except:
51-
conn = None
42+
5243
# Load Skanderbeg key if it exists
5344
SKANDERBEGKEY = os.getenv("SKANDERBEG_KEY")
5445
if SKANDERBEGKEY == "" or SKANDERBEGKEY.isspace():
@@ -60,17 +51,6 @@
6051
discord.DMChannel, discord.GroupChannel]
6152

6253

63-
def checkConn() -> psycopg2.extensions.connection:
64-
"""
65-
Returns an open connection to the SQL server. This is the preferable method of getting it than directly calling on conn.
66-
"""
67-
global conn
68-
if conn is not None and conn.closed:
69-
conn = psycopg2.connect(DATABASEURL, sslmode='require')
70-
conn.autocommit = True
71-
return conn
72-
73-
7454
def imageToFile(img: Image.Image) -> discord.File:
7555
"""
7656
Comverts PIL Images into discord File objects.
@@ -197,8 +177,7 @@ async def checkResAdmin(server: Union[str, int, discord.Guild], user: Union[str,
197177
f"Invalid type for Discord member. Invalid object: {user}")
198178
# OK now check
199179
try:
200-
role = s.get_role(
201-
int(GuildManager.getGuildSave(s, conn=checkConn()).admin))
180+
role = s.get_role(GuildManager.getAdmin(s))
202181
except TypeError:
203182
role = None
204183
return (role is not None and role <= u.top_role) or u.top_role.id == s.roles[-1].id or u._user.id == 249680375280959489
@@ -1418,7 +1397,8 @@ async def process(self, message: discord.Message):
14181397
finaltag = tag.upper()
14191398
resFaction.taken += 1
14201399
break
1421-
finalReserves.append(EU4Reserve.reservePick(res.userID, finaltag))
1400+
finalReserves.append(
1401+
EU4Reserve.reservePick(res.userID, finaltag))
14221402
# At this point the finalReserves list is complete with all finished reserves. If a player had no reserves they could take, their tag is None
14231403
string = "**Reserves are finished. The following is the draft order:**"
14241404
count = 1
@@ -1555,7 +1535,6 @@ async def remove(self, user: DiscUser):
15551535
"""
15561536
self.reserve.removePlayer(user.id)
15571537

1558-
15591538
async def msgdel(self, msgID: Union[str, int]):
15601539
if msgID == self.textID:
15611540
self.textID = None
@@ -1580,8 +1559,8 @@ async def on_ready():
15801559
print("Registering connected Guilds not yet registered...")
15811560
newGuildCount = 0
15821561
async for guild in client.fetch_guilds():
1583-
if GuildManager.getGuildSave(guild, conn=checkConn()) is None:
1584-
GuildManager.addGuild(guild, conn=checkConn())
1562+
if GuildManager.getGuildSave(guild) is None:
1563+
GuildManager.addGuild(guild)
15851564
newGuildCount += 1
15861565
print(f"Registered {newGuildCount} new Guilds.")
15871566
# Load reserves
@@ -1611,7 +1590,8 @@ async def on_ready():
16111590
else: # The message is accessable.
16121591
imgmsg = res.imgID
16131592
# Create the ReserveChannel object and add to control channels list
1614-
controlledChannels.append(ReserveChannel(None, reschannel, textID=textmsg, imgID=imgmsg))
1593+
controlledChannels.append(ReserveChannel(
1594+
None, reschannel, textID=textmsg, imgID=imgmsg))
16151595
# Update if anything was deleted
16161596
if textmsg is None:
16171597
await controlledChannels[-1].updateText()
@@ -1627,7 +1607,8 @@ async def on_ready():
16271607
else: # The message is accessable.
16281608
textmsg = res.textID
16291609
# Create asiresChannel object and add to control channels list
1630-
controlledChannels.append(asiresChannel(None, reschannel, textID=textmsg))
1610+
controlledChannels.append(asiresChannel(
1611+
None, reschannel, textID=textmsg))
16311612
# Update if anything was deleted
16321613
if textmsg is None:
16331614
await controlledChannels[-1].updateText()
@@ -1682,12 +1663,12 @@ async def on_member_remove(member: DiscUser):
16821663
@client.event
16831664
async def on_guild_join(guild: discord.Guild):
16841665
# Setup the joined guild with the GuildManager
1685-
GuildManager.addGuild(guild, conn=checkConn())
1666+
GuildManager.addGuild(guild)
16861667

16871668

16881669
@client.event
16891670
async def on_guild_remove(guild: discord.Guild):
1690-
GuildManager.removeGuild(guild, conn=checkConn())
1671+
GuildManager.removeGuild(guild)
16911672
for c in controlledChannels:
16921673
# Delete any control channels related to the guild that was left.
16931674
if (hasattr(c.displayChannel, "guild") and c.displayChannel.guild == guild) or (hasattr(c.interactChannel, "guild") and c.interactChannel.guild == guild):
@@ -1700,6 +1681,7 @@ async def on_guild_remove(guild: discord.Guild):
17001681
ZLIB_SUFFIX = b'\x00\x00\xff\xff'
17011682
inflator = zlib.decompressobj()
17021683

1684+
17031685
def decompressWebhook(msg: Union[bytes, str]) -> Dict[str, Any]:
17041686
zlibbuffer = bytearray()
17051687
if isinstance(msg, str):
@@ -1826,34 +1808,33 @@ async def permissionDenied():
18261808
if not await checkResAdmin(guild, authorid):
18271809
await permissionDenied()
18281810
return
1829-
tag: str = subcommand[0]["options"][0]["value"]
1830-
if tag is not None:
1831-
GuildManager.addBan(guild, tag, conn=checkConn())
1832-
string = f"Could not find country named {subcommand[0]['options'][0]['value']}." if tag is None else f"Adding {EU4Lib.tagToName(tag)} to default ban list."
1833-
string += "\nNew default ban list: "
1834-
banlist = GuildManager.getGuildSave(
1835-
guild, conn=checkConn()).defaultBan
1836-
for tag in banlist:
1837-
string += EU4Lib.tagToName(tag) + \
1838-
("" if tag is banlist[-1] else ", ")
1811+
tag: str = EU4Lib.country(subcommand[0]["options"][0]["value"])
1812+
if tag is None:
1813+
string = f"Could not find country named {subcommand[0]['options'][0]['value']}."
1814+
else:
1815+
GuildManager.addBan(guild, tag)
1816+
string = f"Adding {EU4Lib.tagToName(tag)} to default ban list."
1817+
string += "\nNew default ban list: "
1818+
banlist = GuildManager.getBan(guild)
1819+
for listtag in banlist:
1820+
string += f"{EU4Lib.tagToName(listtag)}{'' if listtag is banlist[-1] else ', '}"
18391821
elif subcommand[0]["name"] == "del":
18401822
if not await checkResAdmin(guild, authorid):
18411823
await permissionDenied()
18421824
return
1843-
tag: str = subcommand[0]["options"][0]["value"]
1825+
tag: str = EU4Lib.country(subcommand[0]["options"][0]["value"])
1826+
if tag is None:
1827+
string = f"Could not find country named {subcommand[0]['options'][0]['value']}."
18441828
if tag is not None:
1845-
GuildManager.removeBan(guild, tag, conn=checkConn())
1846-
string = f"Could not find country named {subcommand[0]['options'][0]['value']}." if tag is None else f"Removing {EU4Lib.tagToName(tag)} from default ban list."
1847-
string += "\nNew default ban list: "
1848-
banlist = GuildManager.getGuildSave(
1849-
guild, conn=checkConn()).defaultBan
1850-
for tag in banlist:
1851-
string += EU4Lib.tagToName(tag) + \
1852-
("" if tag is banlist[-1] else ", ")
1829+
GuildManager.removeBan(guild, tag)
1830+
string = f"Removing {EU4Lib.tagToName(tag)} from default ban list."
1831+
string += "\nNew default ban list: "
1832+
banlist = GuildManager.getBan(guild)
1833+
for listtag in banlist:
1834+
string += f"{EU4Lib.tagToName(listtag)}{'' if listtag is banlist[-1] else ', '}"
18531835
elif subcommand[0]["name"] == "list":
18541836
string = "Default ban list: "
1855-
banlist = GuildManager.getGuildSave(
1856-
guild, conn=checkConn()).defaultBan
1837+
banlist = GuildManager.getBan(guild)
18571838
for tag in banlist:
18581839
string += EU4Lib.tagToName(tag) + \
18591840
("" if tag is banlist[-1] else ", ")
@@ -1869,8 +1850,8 @@ async def permissionDenied():
18691850
if not await checkResAdmin(guild, authorid):
18701851
await permissionDenied()
18711852
return
1872-
newRankID: str = interaction["data"]["options"][0]["value"]
1873-
GuildManager.setAdmin(guild, newRankID, conn=checkConn())
1853+
newRankID: int = int(interaction["data"]["options"][0]["value"])
1854+
GuildManager.setAdmin(guild, newRankID)
18741855
responsejson = {
18751856
"type": 4,
18761857
"data": {

0 commit comments

Comments
 (0)