Matchy matches matchees
Find a file
2024-08-13 23:29:57 +01:00
.github/workflows Rewrite bin scripts to python in scripts/ dir 2024-08-13 18:27:53 +01:00
.vscode Move python files into py dir 2024-08-11 18:05:28 +01:00
py Remove the default state given to members_to_groups 2024-08-13 23:29:57 +01:00
scripts Rewrite bin scripts to python in scripts/ dir 2024-08-13 18:27:53 +01:00
.gitignore Add the coverage file to the ignore list 2024-08-13 23:05:14 +01:00
LICENSE Add the Unlicense 2024-08-13 15:25:19 +01:00
README.md Remove the TODO about the matcher scope, makes sense now 2024-08-13 23:24:36 +01:00
requirements.txt Add a very basic ownership validation for the owner cog 2024-08-13 23:05:14 +01:00

Matchy

Matchy matches matchees.

Tests

Matchy is a Discord bot that groups up users for fun and vibes. Matchy can be installed on your server by clicking here.

Commands

Matchy is mostly managed with commands in server channels. These are all listed below.

User commands

/join and /leave

Allows users to sign up and leave the group matching in the channel the command is used.

/pause [days: int(7)]

Allows users to pause their matching in a channel for a given number of days. Users can use /join to re-join before the end of that time.

/list

List the current matchees in the channel as well as any current scheduled match runs.

Matcher commands

Only usable by users with the matcher scope.

/match [group_min: int(3)]

Matches groups of users in a channel and offers a button to pose those groups to the channel to users with matcher auth scope. Tracks historical matches and attempts to match users to make new connections with people with divergent roles, in an attempt to maximise diversity.

/schedule [group_min: int(3)] [weekday: int(0)] [hour: int(9)] [cancel: bool(False)]

Allows a matcher to set a weekly schedule for matches in the channel, cancel can be used to remove a scheduled run

Admin commands

Only usable by users with the owner scope. Only usable in a DM with the bot user.

$sync and $close

Syncs bot commands and reloads the state file, or closes down the bot.

Development

Current development is on Linux, though running on Mac or Windows should work fine.

Dependencies

  • python3 - Obviously, ideally 3.11
  • venv - Used for the python virtual env, specs in requirements.txt

Getting Started

git clone git@github.com:mdiluz/matchy.git
cd matchy
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

VSCode can then be configured to use this new .venv and is the recommended way to develop.

Tests

Python tests are written to use pytest and cover most internal functionality. Tests can be run in the same way as in the Github Actions with scripts/test.py, which lints all python code and runs any tests with pytest.

Coverage

A helper script scripts/test-cov.py is available to generate a html view on current code coverage.

Hosting

Config

Matchy is configured by a required config.json file that takes this format:

{
    "version" : 1,
    "token" : "<<github bot token>>",

    "match" : {
        "score_factors": {
            "repeat_role" : 4,
            "repeat_match" : 8,
            "extra_member" : 32,
            "upper_threshold" : 64
        }
    }
}

Only token and version are required. To generate bot token for development see this discord.py guide.

See py/config.py for explanations for any extra settings here.

Running

It is recommended to only ever run the release branch in production, as this branch has passed the tests.

Running the bot can be as simple as python3 scripts/matchy.py, but a scripts/run.py script is provided to update to the latest release, install any new pip dependencies and run the bot.

The following command can be used to execute run.py on a loop, allowing the bot to be updated with a simple $close command from an owner user, but will still exit the loop if the bot throws a fatal error.

while ./scripts/run.py; end

State

State is stored locally in a state.json file. This will be created by the bot. This stores historical information on users, maching schedules, user auth scopes and more. See py/state.py for schema information if you need to inspect it.

TODO

  • Implement better tests to the discordy parts of the codebase
  • Implement a .json file upgrade test
  • Track if matches were successful
  • Improve the weirdo