From c33cf8274e8d3ef3d1fb2d6bbcb427d0d0517b84 Mon Sep 17 00:00:00 2001 From: Thomas Hodnemyr Date: Tue, 3 Jan 2023 00:14:52 +0100 Subject: [PATCH] initial commit --- .env | 1 + __pycache__/bookclub.cpython-310.pyc | Bin 0 -> 5266 bytes __pycache__/rare_hunter.cpython-310.pyc | Bin 0 -> 8119 bytes bookclub.py | 102 ++++++++++++++ main.py | 27 ++++ rare_hunter.py | 169 ++++++++++++++++++++++++ store.db | Bin 0 -> 118784 bytes test.py | 1 + 8 files changed, 300 insertions(+) create mode 100644 .env create mode 100644 __pycache__/bookclub.cpython-310.pyc create mode 100644 __pycache__/rare_hunter.cpython-310.pyc create mode 100644 bookclub.py create mode 100644 main.py create mode 100644 rare_hunter.py create mode 100644 store.db create mode 100644 test.py diff --git a/.env b/.env new file mode 100644 index 0000000..9ea3d18 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +TOKEN = MzA1MDI4MzE5NTA0NjI5NzYw.GRmc_y.343Ir3cXyRhKuYLVKiKMYC6ecjnRjrjJTHxx7E \ No newline at end of file diff --git a/__pycache__/bookclub.cpython-310.pyc b/__pycache__/bookclub.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46d9b5fafd6e7d7fa9983292c7612afa9c7a9119 GIT binary patch literal 5266 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 F`9Jnvg)smC literal 0 HcmV?d00001 diff --git a/__pycache__/rare_hunter.cpython-310.pyc b/__pycache__/rare_hunter.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b953ae94e6d0bf72ebe7ed715c1032166ba37e13 GIT binary patch literal 8119 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 unixepoch('now','-4 hours') ORDER BY layer, reported_at").fetchall() + book_types = cursor.execute("SELECT * FROM books").fetchall() + cursor.close() + connection.close() + + timers = {} + + for entry in advert_data: + if entry[1] not in timers.keys(): + timers[entry[1]] = {} + timers[entry[1]][entry[2]] = entry[3] + timers[entry[1]] = dict(sorted(timers[entry[1]].items(), key=lambda item:item[1])) + + command_id = self.bot.get_global_command_named(name="book_report") + + embed = disnake.Embed() + embed.set_thumbnail("https://i.imgur.com/Jaa3CgV.png") + embed.title = "🌟 - Dalaran Bookclub - 🌟" + embed.description = f"Use the command **<-Click it!** to mark what book and what layer you found it at.\n Timers are for when the spawn window opens.\n Window is open for 1 hour.\nOld timers get purged when not updated" + for layer,times in timers.items(): + tempstring = "" + for book,time in times.items(): + tempstring += f"{book_types[book-1][2]} - - \n" + embed.add_field(name=f"Layer {layer}:",value=tempstring,inline=False) + embed.set_footer(text= "Use reactions below to select which books you need, and the bot will ping you when its seen - Hover to see name") + message:disnake.Message = await self.bot.get_channel(advert_info[2]).fetch_message(advert_info[3]) + await message.edit(content="",embed=embed) + + @commands.slash_command(description="[Admin]Create Bookclub advert",default_member_permissions=disnake.Permissions(manage_guild=True)) + async def setup_bookclub(self, + inter:disnake.ApplicationCommandInteraction): + connection = sqlite3.connect("store.db") + cursor = connection.cursor() + await inter.response.defer(ephemeral="Setting things up") + message = await inter.channel.send("Advert coming soon") + cursor.execute(f"INSERT INTO adverts(server_id,channel_id,message_id) VALUES(?,?,?) ON CONFLICT DO UPDATE SET channel_id = excluded.channel_id, message_id = excluded.message_id",(inter.guild_id,inter.channel_id,message.id)) + connection.commit() + cursor.close() + connection.close() + await self.update_advert(inter.guild_id) + + @commands.slash_command(description="Report a book sighting") + async def book_report(self, + inter:disnake.ApplicationCommandInteraction, + layer:int = commands.Param(choices=[x for x in range(1,7)],description="Which layer was this?"), + book:str = commands.Param(choices=booktypes,description="What book was it?"), + real_book:str = commands.Param(choices=["True","False"],default="False",description="Is this book real? Defaults to False if not added. Pings people if True")): + connection = sqlite3.connect("store.db") + cursor = connection.cursor() + cursor.execute(f"INSERT INTO advert_data(layer,book_id,reported_at) VALUES(?,?,?)",(layer,book[0],int(time.time()))) + connection.commit() + if real_book == "True": + role_id = cursor.execute("SELECT role_id FROM books WHERE id = ?",(book[0],)).fetchone()[0] + advert_info = cursor.execute("SELECT * FROM adverts WHERE server_id = ?",(inter.guild_id,)).fetchone() + await self.bot.get_channel(advert_info[2]).send(content=f"Look alive! <@&{role_id}> spawned on Layer {layer} \n{book}",delete_after=300) + cursor.close() + connection.close() + await self.update_advert(inter.guild_id) + await inter.response.send_message(ephemeral=True,content="Added to list") + + @commands.Cog.listener() + async def on_message(self,message:disnake.Message): + if message.channel.id != 1034201792352886784: return + if message.author == self.bot.user: return + await message.delete() + + @tasks.loop(hours=1) + async def advert_updater(self): + await self.bot.wait_until_ready() + for guild in self.bot.guilds: + await self.update_advert(guild.id) + print("Updated Adverts") + + + diff --git a/main.py b/main.py new file mode 100644 index 0000000..dba21ba --- /dev/null +++ b/main.py @@ -0,0 +1,27 @@ +import disnake +import os +import requests +import sqlite3 +from bookclub import Bookclub +import rare_hunter + +from dotenv import load_dotenv +from disnake.ext import commands,tasks + +from rare_hunter import Rare_Hunter + +load_dotenv('.env') + +intents = disnake.Intents().all() +bot = commands.InteractionBot( + command_sync_flags=commands.CommandSyncFlags.all(), + intents=intents +) +@bot.event +async def on_ready(): + print('Logged In') + + +bot.add_cog(Rare_Hunter(bot)) +bot.add_cog(Bookclub(bot)) +bot.run(os.getenv('TOKEN')) \ No newline at end of file diff --git a/rare_hunter.py b/rare_hunter.py new file mode 100644 index 0000000..0ad77ab --- /dev/null +++ b/rare_hunter.py @@ -0,0 +1,169 @@ +from disnake.ext import commands +import disnake +import sqlite3 +import time + +class Rare_Hunter(commands.Cog): + def __init__(self,bot:commands.InteractionBot): + self.bot = bot + + @commands.slash_command(description="Announce a rare spawn") + async def rare_spawn(self, + inter:disnake.ApplicationCommandInteraction, + mob:str, + party_leader:str): + await inter.response.defer() + + guild = self.bot.get_guild(inter.guild_id) + role = guild.get_role(1017730289239330857) + log_channel = guild.get_channel(1039075467715678308) + connection = sqlite3.connect("store.db") + cursor = connection.cursor() + result = cursor.execute('SELECT * FROM rares WHERE name = ?',(mob,)).fetchone() + cursor.execute(f"INSERT INTO reports(mob_id,party_leader) VALUES(?,?)",(result[0],party_leader)) + eventid = cursor.lastrowid + connection.commit() + count = connection.execute(f"SELECT COUNT(id) FROM reports WHERE mob_id = '{result[0]}'").fetchone() + members_with_kill = [x[0] for x in connection.execute(f"SELECT discord_user_id from mobs_gotten WHERE mob_id = '{result[0]}'").fetchall()] + temp_mentions = [f"{result[2]} Spotted!"] + index = 0 + for member in role.members: + if member.id in members_with_kill: + continue #Skip members who has the kills + if len(temp_mentions[index]) > 1950: #Discord has a 2k char limit, bit of a conservative limit at 1950 but its safe. + index+=1 + temp_mentions.append(f"{result[2]} Spotted!") + temp_mentions[index] += f"<@{member.id}>" + + print(f"{party_leader} found {result[2]} at {time.ctime(time.time())}") + + embed = disnake.Embed() + embed.title = f"Target: **{result[2]}**" + embed.description = f"Whisper **{party_leader}** for invite\n This message will self-destruct " + embed.set_image(result[4]) + embed.add_field(name="Zone:",value=result[3]) + embed.add_field(name="Seen:",value=f"{count[0]} times") + got_it_button = disnake.ui.Button(emoji='🎯', label="Got it",custom_id=f"rspe-mark_done-{eventid}") + killed_button = disnake.ui.Button(emoji='☠️',label="Dead",custom_id=f"rspe-mob_dead-{eventid}") + + log_embed = disnake.Embed() + log_embed.title = f"{result[2]} Spotted by {party_leader}" + log_embed.set_thumbnail(result[4]) + + cursor.close() + connection.close() + for string in temp_mentions: + await inter.channel.send(content=string,delete_after=1) + await inter.followup.send(embed=embed,components=[got_it_button,killed_button],delete_after=800) + await log_channel.send(embed=log_embed,components=[got_it_button]) + + + @rare_spawn.autocomplete("mob") + async def autocomp_mobs(self,inter:disnake.ApplicationCommandInteraction, user_input:str): + connection = sqlite3.connect("store.db") + result = [x[0] for x in connection.execute(f"SELECT name FROM rares WHERE INSTR(LOWER(name),?) > 0 LIMIT 25",(user_input.lower(),)).fetchall()] + connection.close() + return result + + @commands.slash_command(description="Spawn a mob selector for members to pick",default_member_permissions=disnake.Permissions(manage_guild=True)) + async def view_mob_toggles(self,inter:disnake.ApplicationCommandInteraction): + connection = sqlite3.connect("store.db") + outland_mobs = connection.execute("SELECT name,id FROM rares WHERE continent = 'Outland'").fetchall() + northrend_mobs = connection.execute("SELECT name,id FROM rares WHERE continent = 'Northrend'").fetchall() + connection.close() + options_outland = dict((x, y) for x, y in outland_mobs)#[x[0] for x in outland_mobs ] + options_northrend = dict((x, y) for x, y in northrend_mobs) + select_outland = disnake.ui.Select(custom_id='rspe-Outland-select',placeholder="Select Outland mob to toggle state",options=options_outland,max_values=1) + select_northrend = disnake.ui.Select(custom_id='rspe-Northrend-select',placeholder="Select Northrend mob to toggle state",options=options_northrend,max_values=1) + + outland_button = disnake.ui.Button(custom_id="rspe-Outland-show",label="Show Outland Mobs",emoji="<:Outland:1034280526065958952>") + northrend_button = disnake.ui.Button(custom_id="rspe-Northrend-show",label="Show Northrend Mobs",emoji="<:Northrend:1034280524602150952>") + + embed = disnake.Embed() + embed.title = "Edit which mobs you're looking for" + embed.description = "Whenever /rare_spawn is invoked all users with the rare mobs tag, who needs this kill will get pinged.\nYou can use this to set which mobs you have and which you need.\nClick the buttons below to see what the bot knows about you now, and use the drop downs to mark rares accordingly" + + await inter.response.send_message(embed=embed,components=[[select_outland],[select_northrend],[outland_button,northrend_button]]) + + def generate_moblist_embed(self,zone,author_id): + connection = sqlite3.connect("store.db") + outland_mobs = connection.execute("SELECT name,id FROM rares WHERE continent = ?",(zone,)).fetchall() + mobs_killed = [x[0] for x in connection.execute("SELECT mob_id FROM mobs_gotten WHERE discord_user_id = ?",(author_id,)).fetchall()] + temp_str1 = "" + temp_str2 = "" + line_break = 10 + if zone == "Northrend": line_break = 12 + for index,mob in enumerate(outland_mobs): + if index >= line_break: + if mob[1] in mobs_killed: + temp_str2 += f"✅{mob[0]}\n" + else: + temp_str2 += f"🛑{mob[0]}\n" + else: + if mob[1] in mobs_killed: + temp_str1 += f"✅{mob[0]}\n" + else: + temp_str1 += f"🛑{mob[0]}\n" + embed = disnake.Embed() + embed.title = f"{zone} Rares" + embed.add_field(name="\u200b",value=temp_str1) + embed.add_field(name="\u200b",value=temp_str2) + connection.close() + return embed + + @commands.slash_command(description="Spawn a list for your eyes only of the mobs you've killed") + async def view_outland_rares(self,inter:disnake.ApplicationCommandInteraction): + embed = self.generate_moblist_embed("Outland",inter.author.id) + await inter.response.send_message(embed=embed,ephemeral=True) + + @commands.slash_command(description="Spawn a list for your eyes only of the mobs you've killed") + async def view_northrend_rares(self,inter:disnake.ApplicationCommandInteraction): + embed = self.generate_moblist_embed("Northrend",inter.author.id) + await inter.response.send_message(embed=embed,ephemeral=True) + + @commands.Cog.listener() + async def on_message_interaction(self,inter:disnake.MessageInteraction): + if "rspe" in inter.component.custom_id: + + if "select" in inter.component.custom_id: + connection = sqlite3.connect("store.db") + mobs_killed = [x[0] for x in connection.execute("SELECT mob_id FROM mobs_gotten WHERE discord_user_id = ?",(inter.author.id,)).fetchall()] + + for selected in inter.values: + to_int = int(selected) + if to_int in mobs_killed: + print("Deleting Entry",to_int)#Delete the entry + connection.execute("DELETE FROM mobs_gotten WHERE discord_user_id = ? AND mob_id = ?",(inter.author.id,to_int)) + else: + print("Adding Entry", to_int)#Add the entry + connection.execute("INSERT INTO mobs_gotten(discord_user_id,mob_id) VALUES(?,?)",(inter.author.id,to_int)) + connection.commit() + connection.close() + embed = self.generate_moblist_embed(inter.component.custom_id.partition("rspe-")[2].partition("-select")[0],inter.author.id) + await inter.response.defer() + + + return + if "show" in inter.component.custom_id: + embed = self.generate_moblist_embed(inter.component.custom_id.partition("rspe-")[2].partition("-show")[0],inter.author.id) + await inter.response.send_message(embed=embed,ephemeral=True) + return + if "mark_done" in inter.component.custom_id: + connection = sqlite3.connect("store.db") + cursor = connection.cursor() + mob_id = cursor.execute(f"SELECT mob_id FROM reports WHERE id = ?",(inter.component.custom_id.partition("mark_done-")[2],)).fetchone()[0] + cursor.execute(f"INSERT INTO mobs_gotten(discord_user_id,mob_id) VALUES(?,?)",(inter.author.id,mob_id)) + connection.commit() + cursor.close() + connection.close() + await inter.response.send_message(ephemeral=True,content="Marked this rare as completed, you should not get anymore pings from this mob") + return + if "mob_dead" in inter.component.custom_id: + embed = inter.message.embeds[0] + if embed.color == disnake.Color.brand_red(): + await inter.response.defer() + return + embed.color = disnake.Color.brand_red() + embed.title += " - Killed!" + inter.component.disabled = True + await inter.response.edit_message(embed=embed) \ No newline at end of file diff --git a/store.db b/store.db new file mode 100644 index 0000000000000000000000000000000000000000..010f9445c2b992a6d772b8941d10b298d921a89d GIT binary patch literal 118784 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 literal 0 HcmV?d00001 diff --git a/test.py b/test.py new file mode 100644 index 0000000..a4ff123 --- /dev/null +++ b/test.py @@ -0,0 +1 @@ +print("rspe-northrend-show".partition("rspe-")[2].partition("-show")[0]) \ No newline at end of file