diff --git a/.gitignore b/.gitignore index 7a6353d..4acd06b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -.envrc +config.py diff --git a/README.md b/README.md index db266e3..d54af23 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,6 @@ Matchy matches matchies ## Dependencies * `python3` obviously * `discord.py` python module -* `BOT_TOKEN` envar set to a discord bot token \ No newline at end of file + +## Token +Create a `config.py` file with a `TOKEN=` entry \ No newline at end of file diff --git a/matchy.py b/matchy.py index c42fe6b..6ace928 100644 --- a/matchy.py +++ b/matchy.py @@ -1,62 +1,60 @@ import discord import os -import argparse import random -from itertools import islice +from discord import app_commands from discord.ext import commands - -def chunk(it, size): - it = iter(it) - return iter(lambda: tuple(islice(it, size)), ()) +from config import TOKEN intents = discord.Intents.default() intents.message_content = True intents.members = True -bot = commands.Bot(command_prefix='$', description="Matchy matches matchies", intents=intents) +bot = commands.Bot(command_prefix='/', description="Matchy matches matchies", intents=intents) -@bot.command() -async def hello(ctx, *args): - """Just say hello back""" - await ctx.send(f"Hi {ctx.author.mention}") +@bot.event +async def on_ready(): + print("Bot is Up and Ready!") + try: + synced = await bot.tree.sync() + print(f"Synced {len(synced)} command(s)") + except Exception as e: + print(e) -@bot.command() -async def matchy(ctx, *args): - """Create some random groups""" - argparser = argparse.ArgumentParser(exit_on_error=False, add_help=False, usage='$matchy [options]') - argparser.add_argument("--num", default=3, type=int, help="Number of people to match up") - argparser.add_argument("--help", "-h", action='store_true', help=argparse.SUPPRESS) - args = argparser.parse_args(args) - - # Print the help if requested - if args.help: - await ctx.send(argparser.format_help()) - return - +@bot.tree.command() +@app_commands.describe(per_group = "People per group") +async def matchy(interaction: discord.Interaction, per_group: int): # Find the role role = None - for r in ctx.message.guild.roles: + for r in interaction.guild.roles: if r.name == "matchy": role = r break if not role: - await ctx.send("Error: server has no @matchy role!") + await interaction.response.send_message("Server has no @matchy role :(", ephemeral=True) return # Find all the members in the role matchies = [] - for member in ctx.channel.members: - for r in member.roles: - if r == role: - matchies.append(member) - break + for member in interaction.channel.members: + if not member.bot and role in member.roles: + matchies.append(member) + break # Shuffle the people for randomness random.shuffle(matchies) - - # Chunk up the groups and share them - for group in chunk(matchies, args.num): - mentions = [m.mention for m in group] - await ctx.send("A group! " + ", ".join(mentions)) -bot.run(os.getenv("BOT_TOKEN")) \ No newline at end of file + # Calculate the number of groups to generate + total_num = len(matchies) + num_groups = total_num//per_group + if not num_groups: + num_groups = 1 + + # Split members into groups and share them + groups = [matchies[i::num_groups] for i in range(num_groups)] + for group in groups: + mentions = [m.mention for m in group] + await interaction.channel.send("Group : " + ", ".join(mentions)) + + await interaction.response.send_message("Done :)", ephemeral=True, silent=True) + +bot.run(os.getenv(config.TOKEN)) \ No newline at end of file