import discord, pymongo, asyncio, os from discord.ext import commands from dotenv import load_dotenv load_dotenv() class announce(commands.Cog): def __init__(self, bot): self.bot = bot @commands.Cog.listener() async def on_ready(self): print("Announce Online") def is_enabled(self): client = pymongo.MongoClient(os.getenv("mongo_url")) db = client.servers coll = db.settings if coll.find_one({"_id": {"guild_id": self.guild.id, "commands":"announce"}}): command = coll.find_one({"_id": {"guild_id": self.guild.id, "commands":"announce"}}) command_enabled = command["enabled"] # True or False if command_enabled: return True else: return False else: return True @commands.hybrid_command(name="asetup", description="Setup the announce command") @commands.has_permissions(administrator=True) async def asetup(self, ctx, channel: discord.TextChannel): client = pymongo.MongoClient(os.getenv("mongo_url")) db = client.servers coll = db.announce if coll.find_one({"_id": {"guild_id": ctx.guild.id}}): await ctx.send("You have already made an announcement channel") await ctx.send("If you would like to delete this setting please say 'delete' in the next 10 seconds") # if the user says delete, then delete the entry in the database def check(m): return m.author == ctx.author and m.channel == ctx.channel try: msg = await self.bot.wait_for("message", check=check, timeout=10) if msg.content == "delete": coll.delete_one({"_id": {"guild_id": ctx.guild.id}}) await ctx.send("Announcement channel deleted, adding new channel...") coll.insert_one({"_id": {"guild_id": ctx.guild.id}, "channel": channel.id}) await ctx.send("Announcement channel set") except asyncio.TimeoutError: await ctx.send("You took too long to respond") return else: coll.insert_one({"_id": {"guild_id": ctx.guild.id}, "channel": channel.id}) await ctx.send("Announcement channel set") @commands.hybrid_command(name="announce", description="Announce something") @commands.has_permissions(administrator=True) @commands.check(is_enabled) async def announce(self, ctx, *, message): client = pymongo.MongoClient(os.getenv("mongo_url")) db = client.servers coll = db.announce if coll.find_one({"_id": {"guild_id": ctx.guild.id}}): channel_id = coll.find_one({"_id": {"guild_id": ctx.guild.id}})["channel"] channel = discord.utils.get(ctx.guild.text_channels, id=channel_id) await channel.send(message) await ctx.send("Announcement sent!", delete_after=2.0) else: await ctx.send("You have not set an announcement channel yet") async def setup(bot): await bot.add_cog(announce(bot))