Fixed not updating to cache properly

Updating stats to disforge
Refined on_member_join event for less sql statements
pull/8/head
sgoudham 4 years ago
parent 9090718f64
commit b5c3454a74

@ -21,6 +21,7 @@ import random
import aiohttp import aiohttp
import asyncpg as asyncpg import asyncpg as asyncpg
import discord import discord
import pytz
from decouple import config from decouple import config
from discord import Colour, Embed from discord import Colour, Embed
from discord.ext import commands, tasks from discord.ext import commands, tasks
@ -42,6 +43,7 @@ host = config('DB_HOST')
user = config('DB_USER') user = config('DB_USER')
port = config('DB_PORT') port = config('DB_PORT')
db = config('DB_NAME') db = config('DB_NAME')
disforge_auth = config('DISFORGE_AUTH')
disc_bots_gg_auth = config('DISCORD_BOTS_BOTS_AUTH') disc_bots_gg_auth = config('DISCORD_BOTS_BOTS_AUTH')
# Getting the bot token from environment variables # Getting the bot token from environment variables
@ -139,13 +141,18 @@ class Bot(commands.Bot):
self.loop.run_until_complete(startup_cache_log()) self.loop.run_until_complete(startup_cache_log())
async def post_bot_stats(): async def post_bot_stats():
"""Update guild count on discord.bots.gg""" """Update guild count on bot lists"""
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession() as session:
await session.post(f"https://discord.bots.gg/api/v1/bots/{self.user.id}/stats", await session.post(f"https://discord.bots.gg/api/v1/bots/{self.user.id}/stats",
data={"guildCount": {len(self.guilds)}, data={"guildCount": {len(self.guilds)},
"Content-Type": "application/json"}, "Content-Type": "application/json"},
headers={'Authorization': disc_bots_gg_auth}) headers={'Authorization': disc_bots_gg_auth})
await session.post(f"https://disforge.com/api/botstats/{self.user.id}",
data={"servers": {len(self.guilds)}},
headers={'Authorization': disforge_auth})
await session.close() await session.close()
@tasks.loop(minutes=10, reconnect=True) @tasks.loop(minutes=10, reconnect=True)
@ -223,7 +230,7 @@ class Bot(commands.Bot):
def update_modmail(self, guild_id, channel_id): def update_modmail(self, guild_id, channel_id):
"""Update the modmail channel""" """Update the modmail channel"""
self.modmail_cache[guild_id]["roles_persist"] = channel_id self.modmail_cache[guild_id]["modmail_logging_channel_id"] = channel_id
def delete_modmail(self, guild_id): def delete_modmail(self, guild_id):
"""Deleting the modmail system of the guild within the Cache""" """Deleting the modmail system of the guild within the Cache"""
@ -545,10 +552,11 @@ class Bot(commands.Bot):
async with pool.acquire() as conn: async with pool.acquire() as conn:
# Define the insert statement that will insert the user's information # Define the insert statement that will insert the user's information
# On conflict, set the left values to null
try: try:
insert_query = """INSERT INTO members (guild_id, member_id) VALUES ($1, $2)
ON CONFLICT (guild_id, member_id) DO NOTHING"""
insert_query = """INSERT INTO members (guild_id, member_id) VALUES ($1, $2)
ON CONFLICT (guild_id, member_id) DO UPDATE SET roles = NULL"""
rowcount = await conn.execute(insert_query, member.guild.id, member.id) rowcount = await conn.execute(insert_query, member.guild.id, member.id)
# Catch errors # Catch errors
@ -558,6 +566,7 @@ class Bot(commands.Bot):
# Print success # Print success
else: else:
print(rowcount, f"{member} Joined {member.guild}, Record Inserted Into Members") print(rowcount, f"{member} Joined {member.guild}, Record Inserted Into Members")
print(rowcount, f"Roles Cleared For {member} in {member.guild}")
# Get the roles of the user from the database # Get the roles of the user from the database
try: try:
@ -595,22 +604,6 @@ class Bot(commands.Bot):
else: else:
print(f"Insufficient Permissions to Add Roles to Member {member.id} in Guild {member.guild.id}") print(f"Insufficient Permissions to Add Roles to Member {member.id} in Guild {member.guild.id}")
# Reset the roles entry for the database
try:
update_query = """UPDATE members SET roles = NULL WHERE guild_id = $1 AND member_id = $2"""
rowcount = await conn.execute(update_query, member.guild.id, member.id)
# Catch errors
except asyncpg.PostgresError as e:
print(f"PostGres Error: Clearing Member {member.id} Roles in Guild {member.guild.id}", e)
# Print success
else:
print(rowcount, f"Roles Cleared For {member} in {member.guild}")
# Release connection back to pool
await pool.release(conn)
# Make sure the guild is Enso and send welcoming embed to the server # Make sure the guild is Enso and send welcoming embed to the server
if guild.id == self.enso_guild_ID: if guild.id == self.enso_guild_ID:
new_people = guild.get_channel(self.enso_newpeople_ID) new_people = guild.get_channel(self.enso_newpeople_ID)
@ -646,6 +639,9 @@ class Bot(commands.Bot):
# Ignoring bots # Ignoring bots
if member.bot: return if member.bot: return
# Get the datetime of when the user left the guild
my_date = datetime.datetime.now(pytz.timezone('Europe/Berlin'))
# Store member roles within a string to insert into database # Store member roles within a string to insert into database
role_ids = ", ".join([str(r.id) for r in member.roles if not r.managed]) role_ids = ", ".join([str(r.id) for r in member.roles if not r.managed])
@ -657,16 +653,13 @@ class Bot(commands.Bot):
try: try:
update_query = """UPDATE members SET roles = $1 WHERE guild_id = $2 AND member_id = $3""" update_query = """UPDATE members SET roles = $1 WHERE guild_id = $2 AND member_id = $3"""
rowcount = await conn.execute(update_query, role_ids, member.guild.id, member.id) rowcount = await conn.execute(update_query, role_ids, member.guild.id, member.id)
result = await self.check_cache(member.id, member.guild.id)
# Catch Error # Catch Error
except asyncpg.PostgresError as e: except asyncpg.PostgresError as e:
print(f"PostGres Error: Roles Could Not Be Added To {member} When Leaving {member.guild.id}", e) print(f"PostGres Error: Roles Could Not Be Added To {member} When Leaving {member.guild.id}", e)
# Print success # Print success
# Update cache
else: else:
result["roles"] = role_ids
print(rowcount, f"{member} Left {member.guild.name}, Roles stored into Members") print(rowcount, f"{member} Left {member.guild.name}, Roles stored into Members")
finally: finally:

Loading…
Cancel
Save