122 lines
5.7 KiB
Python

import asyncio
import discord
import pymysql
from discord.ext import commands
password = open("../../../../sqlPass.txt", 'r')
con = pymysql.connect(host='localhost',
user='Bot',
password=f'{password}',
db='serverIDs',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
class AddServer(commands.Cog):
def __init__(self, client):
self.client = client
@commands.Cog.listener()
async def on_message(self, ctx):
if isinstance(ctx.channel, discord.DMChannel) and (ctx.content.lower() == "add server"):
try:
await ctx.channel.send("Send me an invite to the server. Say ``cancel`` anytime to cancel.")
invite = await self.client.wait_for("message", check=lambda message: message.author == ctx.author
and message.channel == ctx.channel,
timeout=20)
invite = await self.client.fetch_invite(invite.content)
if invite == "cancel":
await ctx.channel.send("Process canceled")
return
categorys = self.client.get_channel(656998225076551680)
print(categorys.channels)
category_names = ""
for channel in categorys.channels:
category_names = category_names + '`' + channel.name + '` | '
await ctx.channel.send("Please slect a category from the following. This will change how the server"
"is shown in the Hub server \n" + category_names)
category = await self.client.wait_for("message", check=lambda message: message.author == ctx.author
and message.channel == ctx.channel, timeout=20)
category = category.content.lower
if category == "cancel":
await ctx.channel.send("Process canceled")
return
for channel in categorys.channels:
if category == channel.name:
pass
else:
category = "other"
await ctx.channel.send("Please send a list of tags separated by a "
"comma(,) no spaces")
tags = await self.client.wait_for("message", check=lambda message: message.author == ctx.author
and message.channel == ctx.channel,
timeout=20)
if tags == "cancel":
await ctx.channel.send("Process canceled")
return
await ctx.channel.send("Please send a description of the server")
description = await self.client.wait_for("message", check=lambda message: message.author == ctx.author
and message.channel == ctx.channel,
timeout=20)
if description == "cancel":
await ctx.channel.send("Process canceled")
return
nsfw = 0
for channel in invite.guild.channels:
try:
if channel.is_nsfw():
nsfw = 1
except AttributeError:
pass
try:
with con:
cur = con.cursor()
cur.execute(f"INSERT INTO servers "
f"(ID, name, category, tags, description, nsfw, invite, submitter) "
f"VALUES ({invite.guild.id},'"
f"{invite.guild.name}','"
f"{category}','"
f"{tags.content}','"
f"{description.content}','"
f"{nsfw}','"
f"{invite.code}','"
f"{ctx.author.id}')")
await ctx.channel.send("Server added successfully")
embed = discord.Embed(
colour=discord.Colour.green()
)
embed.set_author(name="Server Added")
embed.add_field(name="ID", value=f"{invite.guild.id}", inline=False)
embed.add_field(name="Name", value=f"{invite.guild.name}", inline=False)
embed.add_field(name="Tags", value=f"{tags.content}", inline=False)
embed.add_field(name="Code", value=f"{invite.code}", inline=False)
embed.add_field(name="Description", value=f"{description.content}", inline=False)
await self.client.get_channel(658442038475358238).send(embed=embed)
except Exception as e:
await ctx.channel.send("An error has occurred and will be fixed"
"shortly.")
print(e)
await self.client.get_channel(656997125627969546).send(e)
await self.client. \
get_channel(656997125627969546). \
send("<@305589587215122432>")
except asyncio.TimeoutError:
await ctx.channel.send("Process timeout")
return
await self.client.process_commands(ctx)
def setup(client):
client.add_cog(AddServer(client))