From 095abc6fbd42bee3c4d21573d03fe8d89183cef8 Mon Sep 17 00:00:00 2001 From: Aaron Riedel Date: Sun, 23 Jan 2022 22:59:28 +0100 Subject: [PATCH] insert more slash commands like roll and gmroll --- bot.py | 98 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 82 insertions(+), 16 deletions(-) diff --git a/bot.py b/bot.py index 73d07b2..f41ada5 100644 --- a/bot.py +++ b/bot.py @@ -8,6 +8,7 @@ from os import system from os import environ from discord.ext import commands from discord.commands import Option +from discord.commands import permissions def left(s, amount): return s[:amount] @@ -23,25 +24,29 @@ prefix = os.environ['PREFIX'] bot = commands.Bot(command_prefix=prefix) client = discord.Client() +admin_role=261603488331595776 +member_role=261603747711418371 +gm_role=511893805956595722 + def admin(ctx): - if ctx.guild.get_role(261603488331595776) in ctx.author.roles: + if ctx.guild.get_role(admin_role) in ctx.author.roles: return True def member(ctx): - if ctx.guild.get_role(261603747711418371) in ctx.author.roles: + if ctx.guild.get_role(member_role) in ctx.author.roles: return True def is_admin(): async def predicate(ctx): - if ctx.guild.get_role(261603488331595776) in ctx.author.roles: + if ctx.guild.get_role(admin_role) in ctx.author.roles: return True return commands.check(predicate) def is_member(): async def predicate(ctx): - if ctx.guild.get_role(261603747711418371) in ctx.author.roles: + if ctx.guild.get_role(member_role) in ctx.author.roles: return True return commands.check(predicate) def is_gm(): async def predicate(ctx): - if ctx.guild.get_role(511893805956595722) in ctx.author.roles: + if ctx.guild.get_role(gm_role) in ctx.author.roles: return True return commands.check(predicate) @@ -77,17 +82,34 @@ class Confirm(discord.ui.View): self.value = False self.stop() - -@bot.slash_command(guild_ids=[261575556708040705]) # create a slash command for the supplied guilds -async def hello(ctx): - """Say hello to the bot""" - await ctx.respond(content="Hallo %s" % ctx.author.display_name, ephemeral=True) +class vote_view(discord.ui.View): + def __init__(self): + super().__init__() + self.value = None + @discord.ui.button(label="Ja", style=discord.ButtonStyle.green) + async def yes( + self, button: discord.ui.Button, interaction: discord.Interaction + ): + await interaction.response.send_message("Bestätigt", ephemeral=True) + self.value = "yes" + self.stop() + @discord.ui.button(label="Vielleicht", style=discord.ButtonStyle.grey) + async def maybe(self, button: discord.ui.Button, interaction: discord.Interaction): + await interaction.response.send_message("Abgebrochen", ephemeral=True) + self.value = "maybe" + self.stop() + @discord.ui.button(label="Nein", style=discord.ButtonStyle.red) + async def no(self, button: discord.ui.Button, interaction: discord.Interaction): + await interaction.response.send_message("Abgebrochen", ephemeral=True) + self.value = "no" + self.stop() @bot.slash_command(guild_ids=[261575556708040705]) +@permissions.has_role(member_role) async def roll(ctx, - dice: Option(str, "Würfel die du werfen willst. z.B. 4W20"), + dice: Option(str, "Würfel den/die du werfen willst. z.B. W20, 3d6", default="W20"), ): - await ctx.defer() + """Rolle einen oder mehrere Würfel""" rollt = 0 rolle = " " roll = dice.lower() @@ -113,7 +135,51 @@ async def roll(ctx, rolltotal = rolle + "\n" + rolltotal rolle = "" em = discord.Embed(title=rolle, description=rolltotal, colour=0x009933) - await ctx.respond(embed=em) + await ctx.response.send_message(embed=em) + +@bot.slash_command(guild_ids=[261575556708040705]) +@permissions.has_role(gm_role) +async def gmroll(ctx, + dice: Option(str, "Würfel den/die du werfen willst. z.B. W20, 3d6", default="W20"), + ): + """Rolle einen oder mehrere Würfel verdeckt""" + rollt = 0 + rolle = " " + roll = dice.lower() + if "d" in roll: + rolls = "d" + if "w" in roll: + rolls = "w" + rollc = roll.split(rolls)[0] + if rollc == "": + rollc = 1 + else: + rollc = int(rollc) + rolld = int(roll.split(rolls)[1]) + for x in range(rollc): + rollo = random.randint(1, rolld) + rollt = rollt + rollo + rolle = rolle + " :game_die: " + str(rollo) + " " + if rollc > 1: + rolltotal = "Total: " + str(rollt) + else: + rolltotal = "" + if rollc > 12: + rolltotal = rolle + "\n" + rolltotal + rolle = "" + em = discord.Embed(title=rolle, description=rolltotal, colour=0x009933) + await ctx.response.send_message(embed=em, ephemeral=True) + +@bot.slash_command(guild_ids=[261575556708040705]) +@permissions.has_role(member_role) +async def vote(ctx, + question: Option(str, "zu stellende Frage"), + ): + """Erstelle eine Abstimmung""" + em = discord.Embed(title=question, colour=0x00E0FF) + em.set_author(name=ctx.author.display_name, url=discord.Embed.Empty, icon_url=ctx.author.avatar.url) + view=vote_view() + await ctx.response.send_message(content="||@here||",embed=em, view=view) @bot.command(help="Wirft den gleichen Text zurück.", usage="", hidden=True) @is_admin() @@ -151,7 +217,7 @@ async def survey(ctx, *, arg): desc = desc + emojinumbers[z] + " - " + y + "\n" z = z + 1 em = discord.Embed(title=question, description=desc, colour=0x00E0FF) - em.set_author(name=ctx.author.display_name, url=discord.Embed.Empty, icon_url=ctx.author.avatar_url) + em.set_author(name=ctx.author.display_name, url=discord.Embed.Empty, icon_url=ctx.author.avatar.url) ask_msg = await ctx.send(content="||@here||",embed=em) a = 0 for x in emojinumbers: @@ -175,7 +241,7 @@ async def surveyedit(ctx, *, arg): desc = desc + emojinumbers[z] + " - " + y + "\n" z = z + 1 em = discord.Embed(title=question, description=desc, colour=0x00E0FF) - em.set_author(name=ctx.author.display_name, url=discord.Embed.Empty, icon_url=ctx.author.avatar_url) + em.set_author(name=ctx.author.display_name, url=discord.Embed.Empty, icon_url=ctx.author.avatar.url) survey_msg = await ctx.channel.fetch_message((int(survey_id))) await survey_msg.edit(embed=em) @@ -184,7 +250,7 @@ async def surveyedit(ctx, *, arg): async def vote(ctx, *, arg): await ctx.message.delete() em = discord.Embed(description=arg, colour=0x00E0FF) - em.set_author(name=ctx.author.display_name, url=discord.Embed.Empty, icon_url=ctx.author.avatar_url) + em.set_author(name=ctx.author.display_name, url=discord.Embed.Empty, icon_url=ctx.author.avatar.url) ask_msg = await ctx.send(content="||@here||",embed=em) for x in ["✅", "❔", "❌"]: await ask_msg.add_reaction(x)