Implement very basic matching

This commit is contained in:
Marc Di Luzio 2024-08-07 23:23:52 +01:00
parent f7ca997c96
commit 32103ba045

View file

@ -1,18 +1,62 @@
# This example requires the 'message_content' intent.
import discord import discord
import os import os
import logging import argparse
import random
from itertools import islice
from discord.ext import commands from discord.ext import commands
def chunk(it, size):
it = iter(it)
return iter(lambda: tuple(islice(it, size)), ())
intents = discord.Intents.default() intents = discord.Intents.default()
intents.message_content = True intents.message_content = True
intents.members = True
bot = commands.Bot(command_prefix='$', description="test", intents=intents) bot = commands.Bot(command_prefix='$', description="Matchy matches matchies", intents=intents)
@bot.command() @bot.command()
async def hello(ctx, *args): async def hello(ctx, *args):
"""Just say hello back""" """Just say hello back"""
await ctx.send(f"Hi {ctx.author.mention}") await ctx.send(f"Hi {ctx.author.mention}")
@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
# Find the role
role = None
for r in ctx.message.guild.roles:
if r.name == "matchy":
role = r
break
if not role:
await ctx.send("Error: server has no @matchy role!")
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
# 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")) bot.run(os.getenv("BOT_TOKEN"))