Moving modmail code into one single .py file

pull/8/head
sgoudham 4 years ago
parent 7686cf6b48
commit c3353b40ef

@ -5,6 +5,7 @@ import random
from contextlib import closing from contextlib import closing
import discord import discord
import mariadb
from discord import Embed from discord import Embed
from discord import File from discord import File
from discord.ext import commands from discord.ext import commands
@ -150,6 +151,192 @@ class Modmail(commands.Cog, command_attrs=dict(hidden=True)):
self.bot = bot self.bot = bot
self.anon = None self.anon = None
@commands.group(invoke_without_command=True)
async def mmsetup(self, ctx):
pass
@mmsetup.command()
async def set(self, ctx, channelID: int):
"""Set modmail system"""
# Retrieve a list of channel id's in the guild
channels = [channel.id for channel in ctx.guild.channels]
# Checking if the guild already exists within the database
with db.connection() as conn:
# Get the author's row from the Members Table
select_query = """SELECT * FROM moderatormail WHERE guildID = (?)"""
val = ctx.author.guild.id,
with closing(conn.cursor()) as cursor:
# Execute the SQL Query
cursor.execute(select_query, val)
result = cursor.fetchone()
# Throw error if the guild already exists and then stop the function
if result is not None:
await ctx.send("**Looks like this guild already has a modmail system set up!" +
f"\nPlease check `{ctx.prefix}help` for information on how to update/delete existing information**")
return
# As long as the channel exists within the guild
if channelID in channels:
# Ask for the channel ID that the modmail should be logged to
await ctx.send("**Please enter the ID of the channel you want your modmail to be sent**")
# Check the response is from the author and from the same channel as the previous message
def check(m):
return m.author == ctx.author and m.channel == ctx.channel
# Wait for the message from the author
msg = await self.bot.wait_for('message', check=check)
# As long as the channel exists within the guild
if int(msg.content) in channels:
# Set up embed to let the user how to start sending modmail
ModMail = Embed(title="**Welcome to Modmail!**",
colour=enso_embedmod_colours,
timestamp=datetime.datetime.utcnow())
ModMail.set_thumbnail(url=self.bot.user.avatar_url)
# Define fields to be inserted into the embed
fields = [
("React to this message if you want to send a message to the Staff Team!",
"**React with ✅**", False),
("We encourage all suggestions/thoughts and opinions on the server!" +
"\nAs long as it is **valid** criticism.",
"**Purely negative feedback will not be considered**", False)]
# Add the fields to the embed
for name, value, inline in fields:
ModMail.add_field(name=name, value=value, inline=inline)
try:
# Get the channel object from the channelID input by the user
channel = ctx.author.guild.get_channel(channelID)
modmailchannelID = await channel.send(embed=ModMail)
# Auto add the ✅ reaction
await modmailchannelID.add_reaction('')
# Store the information within the database
with db.connection() as conn:
# Define the insert statement that will insert information about the modmail channel
insert_query = """INSERT INTO moderatormail (guildID, channelID, messageID, modmailChannelID) VALUES (?, ?, ?, ?)"""
vals = ctx.author.guild.id, channelID, modmailchannelID.id, int(msg.content),
with closing(conn.cursor()) as cursor:
# Execute the SQL Query
cursor.execute(insert_query, vals)
await ctx.send("**Your Modmail system is now successfully set up!" +
f"\nPlease refer to `{ctx.prefix}help` for any information**")
return
except mariadb.IntegrityError as err:
print(err)
await ctx.send("Looks like this guild already has a modmail system set up!" +
f"\nPlease check `{ctx.prefix}help` for information on how to update/delete existing information")
else:
# Send error message if the channel ID is not recognised
await ctx.send("**Invalid Channel ID. Aborting Process...**")
return
else:
# Send error message if the channel ID is not recognised
await ctx.send("**Invalid Channel ID. Aborting Process...**")
return
@mmsetup.command()
async def update(self, ctx, channelID: int):
"""Update modmail system"""
# Retrieve a list of channel id's in the guild
channels = [channel.id for channel in ctx.guild.channels]
# Checking if the guild already exists within the database
with db.connection() as conn:
# Get the author's row from the Members Table
select_query = """SELECT * FROM moderatormail WHERE guildID = (?)"""
vals = ctx.author.guild.id,
with closing(conn.cursor()) as cursor:
# Execute the SQL Query
cursor.execute(select_query, vals)
result = cursor.fetchone()
# Throw error if the guild already exists and then stop the function
if result is None:
await ctx.send("**Looks like this guild does not have a modmail system setup!" +
f"\nPlease check `{ctx.prefix}help` for information on how to update/delete existing information**")
return
# As long as the channel exists within the guild
if channelID in channels:
try:
# Store the information within the database
with db.connection() as conn:
# Define the insert statement that will insert information about the modmail channel
update_query = """UPDATE moderatormail SET modmailChannelID = (?) WHERE guildID = (?)"""
vals = channelID, ctx.author.guild.id
with closing(conn.cursor()) as cursor:
# Execute the SQL Query
cursor.execute(update_query, vals)
conn.commit()
except mariadb.Error as err:
print(err)
await ctx.send("**Looks like something went wrong during the update!"
"\nMake sure that the Channel ID is correct!**")
channel = ctx.author.guild.get_channel(channelID)
await ctx.send(
f"**The channel has been updated! Your new modmail will be sent to** {channel.mention}")
else:
# Send error message if the channel ID is not recognised
await ctx.send("**Invalid Channel ID. Aborting Process...**")
return
@mmsetup.command()
async def delete(self, ctx):
"""Delete modmail system"""
# Checking if the guild already exists within the database
with db.connection() as conn:
# Get the author's row from the Members Table
select_query = """SELECT * FROM moderatormail WHERE guildID = (?)"""
vals = ctx.author.guild.id,
with closing(conn.cursor()) as cursor:
# Execute the SQL Query
cursor.execute(select_query, vals)
result = cursor.fetchone()
# Throw error if the guild already exists and then stop the function
if result is None:
await ctx.send("**Looks like this guild does not have a modmail system setup!" +
f"\nPlease check `{ctx.prefix}help` for information on how to update/delete existing information**")
return
try:
# Store the information within the database
with db.connection() as conn:
# Define the delete statement to remove all information about the guild
delete_query = """DELETE FROM moderatormail WHERE guildID = (?)"""
vals = ctx.author.guild.id,
with closing(conn.cursor()) as cursor:
# Execute the SQL Query
cursor.execute(delete_query, vals)
conn.commit()
except mariadb.Error as err:
print(err)
await ctx.send("**Looks like this guild has not set up the modmail system yet!" +
f"\nPlease do `{ctx.prefix}help` to find out how to set it up!**")
# Sending confirmation message that the modmail system has been deleted
await ctx.send("**Modmail system successfully deleted!" +
f"\nPlease do `{ctx.prefix}help` to find out how to set Modmail again!**")
# Setting up Listener to listen for reactions within the modmail channel created # Setting up Listener to listen for reactions within the modmail channel created
@commands.Cog.listener() @commands.Cog.listener()
async def on_raw_reaction_add(self, payload): async def on_raw_reaction_add(self, payload):

Loading…
Cancel
Save