From 25b131f8397464c69bc7742abcb04a88e155cbd4 Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Sun, 2 Mar 2025 01:55:31 -0500 Subject: [PATCH 01/18] Fix line endings with .gitattributes --- .gitattributes | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d53be35 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +# Make sure that shell scripts always use LF -- Windows likes to automatically change it to CRLF +*.sh text eol=lf + +# Make sure Python scripts aren't modified either +*.py text eol=lf \ No newline at end of file From 448df15b89b72a2e986b0809b0a6cda6c8d52b1b Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Sun, 2 Mar 2025 09:04:54 -0500 Subject: [PATCH 02/18] Remove LFG environment variables in contestsuite/settings.py --- src/contestsuite/settings.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/contestsuite/settings.py b/src/contestsuite/settings.py index 1b43346..cb08069 100644 --- a/src/contestsuite/settings.py +++ b/src/contestsuite/settings.py @@ -273,15 +273,6 @@ def get_secret(key, default=None): CELERY_BEAT_SCHEDULE = {} -# Discord -# https://discordpy.readthedocs.io/en/stable/ - -ANNOUNCEMENT_WEBHOOK_URL = get_secret('ANNOUNCEMENT_WEBHOOK_URL', None) -BOT_CHANNEL_WEBHOOK_URL = get_secret('BOT_CHANNEL_WEBHOOK_URL', None) -GUILD_ID = int(get_secret('GUILD_ID', 0)) -SCRAPE_BOT_TOKEN = get_secret('SCRAPE_BOT_TOKEN', None) - - # Hashid Fields # https://pypi.org/project/django-hashid-field/ From fd79d4f060ada7320744cf51ff84d2892a0175ba Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Sun, 2 Mar 2025 09:12:42 -0500 Subject: [PATCH 03/18] Remove LFG Discord implementations in contestadmin/tasks.py --- src/contestadmin/tasks.py | 58 +-------------------------------------- 1 file changed, 1 insertion(+), 57 deletions(-) diff --git a/src/contestadmin/tasks.py b/src/contestadmin/tasks.py index 157850e..9251386 100644 --- a/src/contestadmin/tasks.py +++ b/src/contestadmin/tasks.py @@ -389,60 +389,4 @@ def process_contest_results(): logger.info(f"Processed contest results for {num_teams} teams") else: - logger.error("No Team objects exist in database.") - - -@shared_task -def clear_discord_channel(id): - """ - Celery task to send a clear channel command message to a target Discord server. - - Command used by the ACM-FSU/pcs-bot - - id: ID of the target channel on the Discord server which will be cleared - """ - - try: - webhook = Webhook.from_url( - BOT_CHANNEL_WEBHOOK_URL, adapter=RequestsWebhookAdapter()) - except InvalidArgument: - logger.error('Failed to connect to bot channel webhook.') - else: - message = '$clear '+str(id) - # Executing webhook. - webhook.send(content=message) - - -@shared_task -def create_discord_lfg_roles(): - """ - Celery task to send a create roles command message to a target Discord server. - - Command used by the ACM-FSU/pcs-bot - """ - - try: - webhook = Webhook.from_url( - BOT_CHANNEL_WEBHOOK_URL, adapter=RequestsWebhookAdapter()) - except InvalidArgument: - logger.error('Failed to connect to bot channel webhook.') - else: - message = '$create_roles' - # Executing webhook. - webhook.send(content=message) - - -@shared_task -def remove_all_discord_lfg_roles(): - """ - Celery task to send a remove roles command message to a target Discord server. - - Command used by the ACM-FSU/pcs-bot - """ - - try: - webhook = Webhook.from_url( - BOT_CHANNEL_WEBHOOK_URL, adapter=RequestsWebhookAdapter()) - except InvalidArgument: - logger.error('Failed to connect to bot channel webhook.') - else: - message = '$remove_all_roles' - # Executing webhook. - webhook.send(content=message) + logger.error("No Team objects exist in database.") \ No newline at end of file From f7a9ab8b3fb968b5affd26d5333379bae6d9b001 Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Sun, 2 Mar 2025 09:15:16 -0500 Subject: [PATCH 04/18] Remove LFG dashboard statistics --- src/contestadmin/views.py | 35 +---------------------------------- 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/src/contestadmin/views.py b/src/contestadmin/views.py index bfe693d..454322c 100644 --- a/src/contestadmin/views.py +++ b/src/contestadmin/views.py @@ -256,7 +256,6 @@ def dashboard(request): walkin_form = forms.GenerateWalkinForm(request.POST) file_form = forms.ResultsForm(request.POST, request.FILES) checkin_form = forms.CheckinUsersForm(request.POST) - channel_form = forms.ClearChannelForm(request.POST) update_password_form = forms.UpdatePasswordForm(request.POST) profile_role_form = forms.UpdateProfileRoleForm(request.POST) account_status_form = forms.AccountStatusForm(request.POST) @@ -272,12 +271,6 @@ def dashboard(request): int(checkin_form.cleaned_data['action'])) messages.info(request, 'Check in/out task scheduled.', fail_silently=True) - # Process clear Discord channel form - elif channel_form.is_valid(): - tasks.clear_discord_channel.delay( - channel_form.cleaned_data['channel_id']) - messages.info(request, 'Clear channel task scheduled.', - fail_silently=True) # Process password update form elif update_password_form.is_valid(): try: @@ -383,7 +376,6 @@ def dashboard(request): walkin_form = forms.GenerateWalkinForm() file_form = forms.ResultsForm() checkin_form = forms.CheckinUsersForm() - channel_form = forms.ClearChannelForm() update_password_form = forms.UpdatePasswordForm() profile_role_form = forms.UpdateProfileRoleForm() account_status_form = forms.AccountStatusForm() @@ -418,7 +410,6 @@ def dashboard(request): context['checkin_form'] = checkin_form context['file_form'] = file_form context['gen_walkin_form'] = walkin_form - context['channel_form'] = channel_form context['update_password_form'] = update_password_form context['profile_role_form'] = profile_role_form context['account_status_form'] = account_status_form @@ -512,28 +503,4 @@ def contest_statistics(request): # Course card data context['courses'] = Course.objects.all() - return render(request, 'contestadmin/statistics_dashboard.html', context) - - -@login_required -@user_passes_test(contestadmin_auth, login_url='/', redirect_field_name=None) -def create_discord_roles(request): - """ - View which schedules a Celery task to create LFG roles in a target Discord server. - """ - - tasks.create_discord_lfg_roles.delay() - messages.info(request, 'Create roles task scheduled.', fail_silently=True) - return redirect('admin_dashboard') - - -@login_required -@user_passes_test(contestadmin_auth, login_url='/', redirect_field_name=None) -def remove_discord_roles(request): - """ - View which schedules a Celery task to remove all LFG roles from a target Discord server. - """ - - tasks.remove_all_discord_lfg_roles.delay() - messages.info(request, 'Remove roles task scheduled.', fail_silently=True) - return redirect('admin_dashboard') + return render(request, 'contestadmin/statistics_dashboard.html', context) \ No newline at end of file From 7bd7a10a7d7d11bab82e620ef55487fd3e1dcf51 Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Sun, 2 Mar 2025 09:17:08 -0500 Subject: [PATCH 05/18] Remove ClearChannelForm() from contestadmin/forms.py --- src/contestadmin/forms.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/contestadmin/forms.py b/src/contestadmin/forms.py index 912505b..e0f5c2c 100644 --- a/src/contestadmin/forms.py +++ b/src/contestadmin/forms.py @@ -30,10 +30,6 @@ class Meta: fields = ['results'] -class ClearChannelForm(forms.Form): - channel_id = forms.IntegerField() - - class UpdateProfileRoleForm(forms.ModelForm): username = forms.CharField( max_length=150, From 01d6ab571bd4dfab671fcc63ab30aba429f08bf5 Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Sun, 2 Mar 2025 09:17:53 -0500 Subject: [PATCH 06/18] Remove Discord paths in contestadmin/urls.py --- src/contestadmin/urls.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/contestadmin/urls.py b/src/contestadmin/urls.py index e8fa359..eb9a4d6 100644 --- a/src/contestadmin/urls.py +++ b/src/contestadmin/urls.py @@ -6,8 +6,6 @@ urlpatterns = [ path('', views.dashboard, name='admin_dashboard'), - path('discord/create_roles', views.create_discord_roles, name='create_discord_roles'), - path('discord/remove_roles', views.remove_discord_roles, name='remove_discord_roles'), path('dj_tsv/download', login_required((user_passes_test(contestadmin_auth, login_url='/', redirect_field_name=None))(views.DownloadTSVFiles.as_view())), name='download_dj_files'), path('dj_tsv/generate', login_required((user_passes_test(contestadmin_auth, login_url='/', redirect_field_name=None))(views.GenerateDomJudgeTSV.as_view())), name='gen_dj_files'), path('ec_files/download', login_required((user_passes_test(contestadmin_auth, login_url='/', redirect_field_name=None))(views.DownloadExtraCreditFiles.as_view())), name='download_ec_files'), From 437b4b247c81d8ffb0fa89383e93c35619f3dd2a Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Sun, 2 Mar 2025 09:45:03 -0500 Subject: [PATCH 07/18] Add back environment variable and remove import --- src/contestadmin/tasks.py | 2 +- src/contestsuite/settings.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/contestadmin/tasks.py b/src/contestadmin/tasks.py index 9251386..e6a413e 100644 --- a/src/contestadmin/tasks.py +++ b/src/contestadmin/tasks.py @@ -15,7 +15,7 @@ from celery import shared_task from celery.utils.log import get_task_logger -from contestsuite.settings import MEDIA_ROOT, DEFAULT_FROM_EMAIL, BOT_CHANNEL_WEBHOOK_URL +from contestsuite.settings import MEDIA_ROOT, DEFAULT_FROM_EMAIL from contestadmin.models import Contest from core.utils import make_random_password from manager.models import Course, Faculty, Profile diff --git a/src/contestsuite/settings.py b/src/contestsuite/settings.py index cb08069..ce7af37 100644 --- a/src/contestsuite/settings.py +++ b/src/contestsuite/settings.py @@ -272,6 +272,11 @@ def get_secret(key, default=None): CELERY_BEAT_SCHEDULE = {} +# Discord +# https://discordpy.readthedocs.io/en/stable/ + +ANNOUNCEMENT_WEBHOOK_URL = get_secret('ANNOUNCEMENT_WEBHOOK_URL', None) + # Hashid Fields # https://pypi.org/project/django-hashid-field/ From ce0d46009b164d5d79c1432a604604cf4b93d7be Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Sun, 2 Mar 2025 09:55:05 -0500 Subject: [PATCH 08/18] Remove buttons and forms connected to LFG actions in dashboard --- .../templates/contestadmin/dashboard.html | 47 ------------------- 1 file changed, 47 deletions(-) diff --git a/src/contestadmin/templates/contestadmin/dashboard.html b/src/contestadmin/templates/contestadmin/dashboard.html index efd2e98..faa0249 100644 --- a/src/contestadmin/templates/contestadmin/dashboard.html +++ b/src/contestadmin/templates/contestadmin/dashboard.html @@ -184,53 +184,6 @@

Contest Dashboard

- -
- -
-
- Discord Tools -
- -
- - -
-
- Clear Discord Channel -
-
-
- {% csrf_token %} - {% for field in channel_form %} -

- {{ field | placeholder:"Channel ID" }}
- - {% for error in field.errors %} -

-{{ error }}

- {% endfor %} - -

- {% endfor %} -
- -
-
- -
- -
From ba8f2950320d8b2029b9ab2c7d3fa05a60dfa121 Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Sun, 2 Mar 2025 10:39:42 -0500 Subject: [PATCH 09/18] Remove references to Discord bot in documentation --- docs/deployment/configuration.md | 5 +--- docs/deployment/docker/docker_compose.md | 23 ------------------- docs/deployment/docker/docker_image.md | 3 +-- .../contest_dashboard.md | 8 ------- 4 files changed, 2 insertions(+), 37 deletions(-) diff --git a/docs/deployment/configuration.md b/docs/deployment/configuration.md index 4de4259..91d894a 100644 --- a/docs/deployment/configuration.md +++ b/docs/deployment/configuration.md @@ -106,13 +106,10 @@ The following variables, located in the main settings file[^1], map to various P Variable | Default | Description ---|---|--- ANNOUNCEMENT_WEBHOOK_URL | None | URL of Discord server's announcement channel webhook | -BOT_CHANNEL_WEBHOOK_URL | None | URL of Discord server's bot command channel webhook | -GUILD_ID | 0 | Discord server's Guid ID | -SCRAPE_BOT_TOKEN | None | Discord bot token required by the LFG helper bot | ## Misc -The following variables, located in the main settings file[^1], map to miscellaneous PCS specific settings. A link to relevant documentation is provided for each variable. +The following variables, located in the main settings file[^2], map to miscellaneous PCS specific settings. A link to relevant documentation is provided for each variable. Variable | Default | Description ---|---|--- diff --git a/docs/deployment/docker/docker_compose.md b/docs/deployment/docker/docker_compose.md index 826e1ba..490e68f 100644 --- a/docs/deployment/docker/docker_compose.md +++ b/docs/deployment/docker/docker_compose.md @@ -40,29 +40,6 @@ services: - rabbitmq - celery_worker restart: unless-stopped - scrape_bot: - image: contestsuite:dev - command: /docker/start.sh bot - environment: - # Django - DEBUG: 'True' - - # Database - SQL_DATABASE: contestsuite - SQL_USER: contestadmin - SQL_PASSWORD: seminoles1! - - # Discord - BOT_CHANNEL: # Name of command channel - GUILD_ID: # Discord Server ID - SCRAPE_BOT_TOKEN: # Token for the member list scraping bot - volumes: - - ../src:/app - networks: - - contestsuite - depends_on: - - mariadb - - django celery_worker: image: contestsuite:dev command: /docker/start.sh worker debug diff --git a/docs/deployment/docker/docker_image.md b/docs/deployment/docker/docker_image.md index 2cf311b..6a3d546 100644 --- a/docs/deployment/docker/docker_image.md +++ b/docs/deployment/docker/docker_image.md @@ -24,7 +24,7 @@ REQUIREMENTS | requirements.txt | Path to the manifest file to use during image ## Run Image -The `Dockerfile` specifies an image capable of running the Django web app, Celery, or a helper Discord bot. The parameters passed to the image's start script `start.sh` determine the container's behavior. +The `Dockerfile` specifies an image capable of running the Django web app with Celery. The parameters passed to the image's start script `start.sh` determine the container's behavior. ```bash docker run /docker/start.sh @@ -36,7 +36,6 @@ server | Yes | Gunicorn server bound to the Django app worker | No | Celery Worker beat | No | Celery Beat flower | No | Celery Flower -bot | No | Discord bot `MODE` | Default | Usage ---|---|--- diff --git a/docs/usage/contest_administration/contest_dashboard.md b/docs/usage/contest_administration/contest_dashboard.md index 65f33d9..6d7d2da 100644 --- a/docs/usage/contest_administration/contest_dashboard.md +++ b/docs/usage/contest_administration/contest_dashboard.md @@ -31,13 +31,5 @@ The Contest Dashboard centralizes many of the administrator actions available in - **Account Tools** - Manually activate a user account. Useful if a registrant has issues verifying their account. - Mark a given team as a Faculty Team -- **Discord Tools** - - Creates the Upper/Lower Division Looking For Group roles on a Discord server - - server specified by `GUILD_ID` configuration variable - - Removes the Upper/Lower Division Looking For Group roles on a Discord server - - server specified by `GUILD_ID` configuration variable -- **Clear Discord Channel** - - Clears a channel on a Discord server of all content - - server specified by `GUILD_ID` configuration variable - **Volunteers** - Displays all volunteers registered in the system, whether they have registered for extra credit, and if they've checked into the contest From ef37fa6224b67bc2893988f6a939bb32785c13a0 Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Sun, 2 Mar 2025 10:58:58 -0500 Subject: [PATCH 10/18] Update discord.py to version 2.5.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 26dbc86..1ae8028 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ cron-descriptor==1.4.0 defusedxml==0.7.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' deprecated==1.2.14; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' diff-match-patch==20230430; python_version >= '3.7' -discord.py==1.7.3 +discord.py==2.5.0 django==4.2.4 django-celery-beat==2.5.0 django-hashid-field==3.3.7 From daef8caf6791c8c79ff5e1ced41189979eff0f0f Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Sun, 2 Mar 2025 11:52:28 -0500 Subject: [PATCH 11/18] Upgrade discord.py and change Webhook implementation --- Pipfile | 2 +- Pipfile.lock | 449 +++++++++++++++++++++++++++++++++---- requirements-dev.txt | 2 +- src/announcements/tasks.py | 33 ++- src/contestadmin/tasks.py | 2 - 5 files changed, 420 insertions(+), 68 deletions(-) diff --git a/Pipfile b/Pipfile index 98f694e..188c2d5 100644 --- a/Pipfile +++ b/Pipfile @@ -12,11 +12,11 @@ django-import-export = "*" celery = "*" gunicorn = "*" six = "*" -"discord.py" = "<2.0" requests = "*" django-hashid-field = "*" django-celery-beat = "*" flower = "*" +discord-py = "==2.5.0" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index 2a02db2..46a1f97 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "2b476db83fc5d83ad0a857c881206850e68c8d42d501c5c6b36a36f64adf04fb" + "sha256": "09f1ca6029a8b82ecd0bfdd667667084d878b6b202801a9f495a297835f8e522" }, "pipfile-spec": 6, "requires": { @@ -16,19 +16,108 @@ ] }, "default": { + "aiohappyeyeballs": { + "hashes": [ + "sha256:147ec992cf873d74f5062644332c539fcd42956dc69453fe5204195e560517e1", + "sha256:9b05052f9042985d32ecbe4b59a77ae19c006a78f1344d7fdad69d28ded3d0b0" + ], + "markers": "python_version >= '3.9'", + "version": "==2.4.6" + }, "aiohttp": { "hashes": [ - "sha256:3a253332a0d8f82549e65035ebe7199580c3ea0e47071b7428f25b109b3c0310", - "sha256:3ac6fa105355928e2fc02e876d0d72d6230557d4637017ebf09aec7611124155", - "sha256:3bfcb76553d7f6296d1a598162d5fb890198f98c021540cbbb85bb604ff198db", - "sha256:714c62532ca6be90be4b54002743e7ea277ec78b45f04ae86cdc6f45a8400abd", - "sha256:81a6aaace2b9e8a87531277a5d5f998efbd3554c15bf47173834386966d1bbe1", - "sha256:ad374a5d7be1de271ecd0fb0ef87c0f8dd9fb062e6fae350fa6c098360018978", - "sha256:c3e1897726f97d40e067e8b658b2dbdfe216f32b801c5c589212e1b1f9aa8388", - "sha256:c579ec606f25b3f756f177fee6db344f8d7ef75cfc0603a94c9fa1d1c645789d", - "sha256:e1985766a4c83fcbdf7dde06544231fc9fb3de8929788179e623d6f9f9f321d2" + "sha256:00c8ac69e259c60976aa2edae3f13d9991cf079aaa4d3cd5a49168ae3748dee3", + "sha256:01816f07c9cc9d80f858615b1365f8319d6a5fd079cd668cc58e15aafbc76a54", + "sha256:02876bf2f69b062584965507b07bc06903c2dc93c57a554b64e012d636952654", + "sha256:0e9eb7e5764abcb49f0e2bd8f5731849b8728efbf26d0cac8e81384c95acec3f", + "sha256:0f6b2c5b4a4d22b8fb2c92ac98e0747f5f195e8e9448bfb7404cd77e7bfa243f", + "sha256:1982c98ac62c132d2b773d50e2fcc941eb0b8bad3ec078ce7e7877c4d5a2dce7", + "sha256:1e83fb1991e9d8982b3b36aea1e7ad27ea0ce18c14d054c7a404d68b0319eebb", + "sha256:25de43bb3cf83ad83efc8295af7310219af6dbe4c543c2e74988d8e9c8a2a917", + "sha256:28a772757c9067e2aee8a6b2b425d0efaa628c264d6416d283694c3d86da7689", + "sha256:2a4a13dfbb23977a51853b419141cd0a9b9573ab8d3a1455c6e63561387b52ff", + "sha256:2a8a6bc19818ac3e5596310ace5aa50d918e1ebdcc204dc96e2f4d505d51740c", + "sha256:2eabb269dc3852537d57589b36d7f7362e57d1ece308842ef44d9830d2dc3c90", + "sha256:35cda4e07f5e058a723436c4d2b7ba2124ab4e0aa49e6325aed5896507a8a42e", + "sha256:42d689a5c0a0c357018993e471893e939f555e302313d5c61dfc566c2cad6185", + "sha256:4586a68730bd2f2b04a83e83f79d271d8ed13763f64b75920f18a3a677b9a7f0", + "sha256:47dc018b1b220c48089b5b9382fbab94db35bef2fa192995be22cbad3c5730c8", + "sha256:507ab05d90586dacb4f26a001c3abf912eb719d05635cbfad930bdbeb469b36c", + "sha256:5194143927e494616e335d074e77a5dac7cd353a04755330c9adc984ac5a628e", + "sha256:51c3ff9c7a25f3cad5c09d9aacbc5aefb9267167c4652c1eb737989b554fe278", + "sha256:55789e93c5ed71832e7fac868167276beadf9877b85697020c46e9a75471f55f", + "sha256:5724cc77f4e648362ebbb49bdecb9e2b86d9b172c68a295263fa072e679ee69d", + "sha256:5ad8f1c19fe277eeb8bc45741c6d60ddd11d705c12a4d8ee17546acff98e0802", + "sha256:5ceb81a4db2decdfa087381b5fc5847aa448244f973e5da232610304e199e7b2", + "sha256:64815c6f02e8506b10113ddbc6b196f58dbef135751cc7c32136df27b736db09", + "sha256:66047eacbc73e6fe2462b77ce39fc170ab51235caf331e735eae91c95e6a11e4", + "sha256:669dd33f028e54fe4c96576f406ebb242ba534dd3a981ce009961bf49960f117", + "sha256:684eea71ab6e8ade86b9021bb62af4bf0881f6be4e926b6b5455de74e420783a", + "sha256:6b35aab22419ba45f8fc290d0010898de7a6ad131e468ffa3922b1b0b24e9d2e", + "sha256:7104d5b3943c6351d1ad7027d90bdd0ea002903e9f610735ac99df3b81f102ee", + "sha256:718d5deb678bc4b9d575bfe83a59270861417da071ab44542d0fcb6faa686636", + "sha256:747ec46290107a490d21fe1ff4183bef8022b848cf9516970cb31de6d9460088", + "sha256:7836587eef675a17d835ec3d98a8c9acdbeb2c1d72b0556f0edf4e855a25e9c1", + "sha256:78e4dd9c34ec7b8b121854eb5342bac8b02aa03075ae8618b6210a06bbb8a115", + "sha256:7b77ee42addbb1c36d35aca55e8cc6d0958f8419e458bb70888d8c69a4ca833d", + "sha256:7c1b20a1ace54af7db1f95af85da530fe97407d9063b7aaf9ce6a32f44730778", + "sha256:7f27eec42f6c3c1df09cfc1f6786308f8b525b8efaaf6d6bd76c1f52c6511f6a", + "sha256:82c249f2bfa5ecbe4a1a7902c81c0fba52ed9ebd0176ab3047395d02ad96cfcb", + "sha256:85fa0b18558eb1427090912bd456a01f71edab0872f4e0f9e4285571941e4090", + "sha256:89ce611b1eac93ce2ade68f1470889e0173d606de20c85a012bfa24be96cf867", + "sha256:8ce789231404ca8fff7f693cdce398abf6d90fd5dae2b1847477196c243b1fbb", + "sha256:90d571c98d19a8b6e793b34aa4df4cee1e8fe2862d65cc49185a3a3d0a1a3996", + "sha256:9229d8613bd8401182868fe95688f7581673e1c18ff78855671a4b8284f47bcb", + "sha256:93a1f7d857c4fcf7cabb1178058182c789b30d85de379e04f64c15b7e88d66fb", + "sha256:967b93f21b426f23ca37329230d5bd122f25516ae2f24a9cea95a30023ff8283", + "sha256:9840be675de208d1f68f84d578eaa4d1a36eee70b16ae31ab933520c49ba1325", + "sha256:9862d077b9ffa015dbe3ce6c081bdf35135948cb89116e26667dd183550833d1", + "sha256:9b5b37c863ad5b0892cc7a4ceb1e435e5e6acd3f2f8d3e11fa56f08d3c67b820", + "sha256:9e64ca2dbea28807f8484c13f684a2f761e69ba2640ec49dacd342763cc265ef", + "sha256:9fe4eb0e7f50cdb99b26250d9328faef30b1175a5dbcfd6d0578d18456bac567", + "sha256:a01fe9f1e05025eacdd97590895e2737b9f851d0eb2e017ae9574d9a4f0b6252", + "sha256:a08ad95fcbd595803e0c4280671d808eb170a64ca3f2980dd38e7a72ed8d1fea", + "sha256:a4fe27dbbeec445e6e1291e61d61eb212ee9fed6e47998b27de71d70d3e8777d", + "sha256:a7d474c5c1f0b9405c1565fafdc4429fa7d986ccbec7ce55bc6a330f36409cad", + "sha256:a86dc177eb4c286c19d1823ac296299f59ed8106c9536d2b559f65836e0fb2c6", + "sha256:aa36c35e94ecdb478246dd60db12aba57cfcd0abcad43c927a8876f25734d496", + "sha256:ab915a57c65f7a29353c8014ac4be685c8e4a19e792a79fe133a8e101111438e", + "sha256:af55314407714fe77a68a9ccaab90fdb5deb57342585fd4a3a8102b6d4370080", + "sha256:afcb6b275c2d2ba5d8418bf30a9654fa978b4f819c2e8db6311b3525c86fe637", + "sha256:b27961d65639128336b7a7c3f0046dcc62a9443d5ef962e3c84170ac620cec47", + "sha256:b5b95787335c483cd5f29577f42bbe027a412c5431f2f80a749c80d040f7ca9f", + "sha256:b73a2b139782a07658fbf170fe4bcdf70fc597fae5ffe75e5b67674c27434a9f", + "sha256:b88aca5adbf4625e11118df45acac29616b425833c3be7a05ef63a6a4017bfdb", + "sha256:b992778d95b60a21c4d8d4a5f15aaab2bd3c3e16466a72d7f9bfd86e8cea0d4b", + "sha256:ba40b7ae0f81c7029583a338853f6607b6d83a341a3dcde8bed1ea58a3af1df9", + "sha256:baae005092e3f200de02699314ac8933ec20abf998ec0be39448f6605bce93df", + "sha256:c4bea08a6aad9195ac9b1be6b0c7e8a702a9cec57ce6b713698b4a5afa9c2e33", + "sha256:c6070bcf2173a7146bb9e4735b3c62b2accba459a6eae44deea0eb23e0035a23", + "sha256:c929f9a7249a11e4aa5c157091cfad7f49cc6b13f4eecf9b747104befd9f56f2", + "sha256:c97be90d70f7db3aa041d720bfb95f4869d6063fcdf2bb8333764d97e319b7d0", + "sha256:ce10ddfbe26ed5856d6902162f71b8fe08545380570a885b4ab56aecfdcb07f4", + "sha256:cf1f31f83d16ec344136359001c5e871915c6ab685a3d8dee38e2961b4c81730", + "sha256:d2b25b2eeb35707113b2d570cadc7c612a57f1c5d3e7bb2b13870fe284e08fc0", + "sha256:d33851d85537bbf0f6291ddc97926a754c8f041af759e0aa0230fe939168852b", + "sha256:e06cf4852ce8c4442a59bae5a3ea01162b8fcb49ab438d8548b8dc79375dad8a", + "sha256:e271beb2b1dabec5cd84eb488bdabf9758d22ad13471e9c356be07ad139b3012", + "sha256:f55d0f242c2d1fcdf802c8fabcff25a9d85550a4cf3a9cf5f2a6b5742c992839", + "sha256:f81cba651db8795f688c589dd11a4fbb834f2e59bbf9bb50908be36e416dc760", + "sha256:fa1fb1b61881c8405829c50e9cc5c875bfdbf685edf57a76817dfb50643e4a1a", + "sha256:fa48dac27f41b36735c807d1ab093a8386701bbf00eb6b89a0f69d9fa26b3671", + "sha256:fbfef0666ae9e07abfa2c54c212ac18a1f63e13e0760a769f70b5717742f3ece", + "sha256:fe7065e2215e4bba63dc00db9ae654c1ba3950a5fff691475a32f511142fcddb" + ], + "markers": "python_version >= '3.9'", + "version": "==3.11.13" + }, + "aiosignal": { + "hashes": [ + "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5", + "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54" ], - "version": "==1.0.5" + "markers": "python_version >= '3.9'", + "version": "==1.3.2" }, "amqp": { "hashes": [ @@ -54,6 +143,14 @@ "markers": "python_version >= '3.8'", "version": "==5.0.1" }, + "attrs": { + "hashes": [ + "sha256:1c97078a80c814273a76b2a298a932eb681c87415c11dee0a6921de7f1b02c3e", + "sha256:c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a" + ], + "markers": "python_version >= '3.8'", + "version": "==25.1.0" + }, "billiard": { "hashes": [ "sha256:12b641b0c539073fc8d3f5b8b7be998956665c4233c7c1fcd66a7e677c4fb36f", @@ -79,14 +176,6 @@ "markers": "python_version >= '3.6'", "version": "==2025.1.31" }, - "chardet": { - "hashes": [ - "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", - "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970" - ], - "markers": "python_version >= '3.7'", - "version": "==5.2.0" - }, "charset-normalizer": { "hashes": [ "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", @@ -231,11 +320,14 @@ "markers": "python_version >= '3.7'", "version": "==20241021" }, - "discord.py": { + "discord-py": { "hashes": [ - "sha256:17fb8814100fbaf7a79468baa432184db6cef3bbea4ad194fe297c7407d50108" + "sha256:8e1e3b3ff5a112a4ab3a615059a285238eea34edff6de8737db6e1f72ea05195", + "sha256:f6827909b87ea89bdb2cc49d475cb1fada2e73235a3e4568fc8b113660340c73" ], - "version": "==0.16.12" + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==2.5.0" }, "django": { "hashes": [ @@ -289,6 +381,104 @@ "markers": "python_version >= '3.7'", "version": "==2.0.1" }, + "frozenlist": { + "hashes": [ + "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e", + "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf", + "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6", + "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a", + "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d", + "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f", + "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28", + "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b", + "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9", + "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2", + "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec", + "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2", + "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c", + "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336", + "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4", + "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d", + "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b", + "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c", + "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10", + "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08", + "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942", + "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8", + "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f", + "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10", + "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5", + "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6", + "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21", + "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c", + "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d", + "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923", + "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608", + "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de", + "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17", + "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0", + "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f", + "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641", + "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c", + "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a", + "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0", + "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9", + "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab", + "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f", + "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3", + "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a", + "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784", + "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604", + "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d", + "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5", + "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03", + "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e", + "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953", + "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee", + "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d", + "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817", + "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3", + "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039", + "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f", + "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9", + "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf", + "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76", + "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba", + "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171", + "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb", + "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439", + "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631", + "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972", + "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d", + "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869", + "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9", + "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411", + "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723", + "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2", + "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b", + "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99", + "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e", + "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840", + "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3", + "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb", + "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3", + "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0", + "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca", + "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45", + "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e", + "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f", + "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5", + "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307", + "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e", + "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2", + "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778", + "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a", + "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30", + "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a" + ], + "markers": "python_version >= '3.8'", + "version": "==1.5.0" + }, "gunicorn": { "hashes": [ "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d", @@ -583,6 +773,110 @@ "markers": "python_full_version >= '3.8.0'", "version": "==3.0.50" }, + "propcache": { + "hashes": [ + "sha256:02df07041e0820cacc8f739510078f2aadcfd3fc57eaeeb16d5ded85c872c89e", + "sha256:03acd9ff19021bd0567582ac88f821b66883e158274183b9e5586f678984f8fe", + "sha256:03c091bb752349402f23ee43bb2bff6bd80ccab7c9df6b88ad4322258d6960fc", + "sha256:07700939b2cbd67bfb3b76a12e1412405d71019df00ca5697ce75e5ef789d829", + "sha256:0c3e893c4464ebd751b44ae76c12c5f5c1e4f6cbd6fbf67e3783cd93ad221863", + "sha256:119e244ab40f70a98c91906d4c1f4c5f2e68bd0b14e7ab0a06922038fae8a20f", + "sha256:11ae6a8a01b8a4dc79093b5d3ca2c8a4436f5ee251a9840d7790dccbd96cb649", + "sha256:15010f29fbed80e711db272909a074dc79858c6d28e2915704cfc487a8ac89c6", + "sha256:19d36bb351ad5554ff20f2ae75f88ce205b0748c38b146c75628577020351e3c", + "sha256:1c8f7d896a16da9455f882870a507567d4f58c53504dc2d4b1e1d386dfe4588a", + "sha256:2383a17385d9800b6eb5855c2f05ee550f803878f344f58b6e194de08b96352c", + "sha256:24c04f8fbf60094c531667b8207acbae54146661657a1b1be6d3ca7773b7a545", + "sha256:2578541776769b500bada3f8a4eeaf944530516b6e90c089aa368266ed70c49e", + "sha256:26a67e5c04e3119594d8cfae517f4b9330c395df07ea65eab16f3d559b7068fe", + "sha256:2b975528998de037dfbc10144b8aed9b8dd5a99ec547f14d1cb7c5665a43f075", + "sha256:2d15bc27163cd4df433e75f546b9ac31c1ba7b0b128bfb1b90df19082466ff57", + "sha256:2d913d36bdaf368637b4f88d554fb9cb9d53d6920b9c5563846555938d5450bf", + "sha256:3302c5287e504d23bb0e64d2a921d1eb4a03fb93a0a0aa3b53de059f5a5d737d", + "sha256:36ca5e9a21822cc1746023e88f5c0af6fce3af3b85d4520efb1ce4221bed75cc", + "sha256:3b812b3cb6caacd072276ac0492d249f210006c57726b6484a1e1805b3cfeea0", + "sha256:3c6ec957025bf32b15cbc6b67afe233c65b30005e4c55fe5768e4bb518d712f1", + "sha256:41de3da5458edd5678b0f6ff66691507f9885f5fe6a0fb99a5d10d10c0fd2d64", + "sha256:42924dc0c9d73e49908e35bbdec87adedd651ea24c53c29cac103ede0ea1d340", + "sha256:4544699674faf66fb6b4473a1518ae4999c1b614f0b8297b1cef96bac25381db", + "sha256:46ed02532cb66612d42ae5c3929b5e98ae330ea0f3900bc66ec5f4862069519b", + "sha256:49ea05212a529c2caffe411e25a59308b07d6e10bf2505d77da72891f9a05641", + "sha256:4fa0e7c9c3cf7c276d4f6ab9af8adddc127d04e0fcabede315904d2ff76db626", + "sha256:507c5357a8d8b4593b97fb669c50598f4e6cccbbf77e22fa9598aba78292b4d7", + "sha256:549722908de62aa0b47a78b90531c022fa6e139f9166be634f667ff45632cc92", + "sha256:58e6d2a5a7cb3e5f166fd58e71e9a4ff504be9dc61b88167e75f835da5764d07", + "sha256:5a16167118677d94bb48bfcd91e420088854eb0737b76ec374b91498fb77a70e", + "sha256:5d62c4f6706bff5d8a52fd51fec6069bef69e7202ed481486c0bc3874912c787", + "sha256:5fa159dcee5dba00c1def3231c249cf261185189205073bde13797e57dd7540a", + "sha256:6032231d4a5abd67c7f71168fd64a47b6b451fbcb91c8397c2f7610e67683810", + "sha256:63f26258a163c34542c24808f03d734b338da66ba91f410a703e505c8485791d", + "sha256:65a37714b8ad9aba5780325228598a5b16c47ba0f8aeb3dc0514701e4413d7c0", + "sha256:67054e47c01b7b349b94ed0840ccae075449503cf1fdd0a1fdd98ab5ddc2667b", + "sha256:67dda3c7325691c2081510e92c561f465ba61b975f481735aefdfc845d2cd043", + "sha256:6985a593417cdbc94c7f9c3403747335e450c1599da1647a5af76539672464d3", + "sha256:6a1948df1bb1d56b5e7b0553c0fa04fd0e320997ae99689488201f19fa90d2e7", + "sha256:6b5b7fd6ee7b54e01759f2044f936dcf7dea6e7585f35490f7ca0420fe723c0d", + "sha256:6c929916cbdb540d3407c66f19f73387f43e7c12fa318a66f64ac99da601bcdf", + "sha256:6f4d7a7c0aff92e8354cceca6fe223973ddf08401047920df0fcb24be2bd5138", + "sha256:728af36011bb5d344c4fe4af79cfe186729efb649d2f8b395d1572fb088a996c", + "sha256:742840d1d0438eb7ea4280f3347598f507a199a35a08294afdcc560c3739989d", + "sha256:75e872573220d1ee2305b35c9813626e620768248425f58798413e9c39741f46", + "sha256:794c3dd744fad478b6232289c866c25406ecdfc47e294618bdf1697e69bd64a6", + "sha256:7c0fdbdf6983526e269e5a8d53b7ae3622dd6998468821d660d0daf72779aefa", + "sha256:7c5f5290799a3f6539cc5e6f474c3e5c5fbeba74a5e1e5be75587746a940d51e", + "sha256:7c6e7e4f9167fddc438cd653d826f2222222564daed4116a02a184b464d3ef05", + "sha256:7cedd25e5f678f7738da38037435b340694ab34d424938041aa630d8bac42663", + "sha256:7e2e068a83552ddf7a39a99488bcba05ac13454fb205c847674da0352602082f", + "sha256:8319293e85feadbbfe2150a5659dbc2ebc4afdeaf7d98936fb9a2f2ba0d4c35c", + "sha256:8526b0941ec5a40220fc4dfde76aed58808e2b309c03e9fa8e2260083ef7157f", + "sha256:8884ba1a0fe7210b775106b25850f5e5a9dc3c840d1ae9924ee6ea2eb3acbfe7", + "sha256:8cb625bcb5add899cb8ba7bf716ec1d3e8f7cdea9b0713fa99eadf73b6d4986f", + "sha256:8d663fd71491dde7dfdfc899d13a067a94198e90695b4321084c6e450743b8c7", + "sha256:8ee1983728964d6070ab443399c476de93d5d741f71e8f6e7880a065f878e0b9", + "sha256:997e7b8f173a391987df40f3b52c423e5850be6f6df0dcfb5376365440b56667", + "sha256:9be90eebc9842a93ef8335291f57b3b7488ac24f70df96a6034a13cb58e6ff86", + "sha256:9ddd49258610499aab83b4f5b61b32e11fce873586282a0e972e5ab3bcadee51", + "sha256:9ecde3671e62eeb99e977f5221abcf40c208f69b5eb986b061ccec317c82ebd0", + "sha256:9ff4e9ecb6e4b363430edf2c6e50173a63e0820e549918adef70515f87ced19a", + "sha256:a254537b9b696ede293bfdbc0a65200e8e4507bc9f37831e2a0318a9b333c85c", + "sha256:a2b9bf8c79b660d0ca1ad95e587818c30ccdb11f787657458d6f26a1ea18c568", + "sha256:a61a68d630e812b67b5bf097ab84e2cd79b48c792857dc10ba8a223f5b06a2af", + "sha256:a7080b0159ce05f179cfac592cda1a82898ca9cd097dacf8ea20ae33474fbb25", + "sha256:a8fd93de4e1d278046345f49e2238cdb298589325849b2645d4a94c53faeffc5", + "sha256:a94ffc66738da99232ddffcf7910e0f69e2bbe3a0802e54426dbf0714e1c2ffe", + "sha256:aa806bbc13eac1ab6291ed21ecd2dd426063ca5417dd507e6be58de20e58dfcf", + "sha256:b0c1a133d42c6fc1f5fbcf5c91331657a1ff822e87989bf4a6e2e39b818d0ee9", + "sha256:b58229a844931bca61b3a20efd2be2a2acb4ad1622fc026504309a6883686fbf", + "sha256:bb2f144c6d98bb5cbc94adeb0447cfd4c0f991341baa68eee3f3b0c9c0e83767", + "sha256:be90c94570840939fecedf99fa72839aed70b0ced449b415c85e01ae67422c90", + "sha256:bf0d9a171908f32d54f651648c7290397b8792f4303821c42a74e7805bfb813c", + "sha256:bf15fc0b45914d9d1b706f7c9c4f66f2b7b053e9517e40123e137e8ca8958b3d", + "sha256:bf4298f366ca7e1ad1d21bbb58300a6985015909964077afd37559084590c929", + "sha256:c441c841e82c5ba7a85ad25986014be8d7849c3cfbdb6004541873505929a74e", + "sha256:cacea77ef7a2195f04f9279297684955e3d1ae4241092ff0cfcef532bb7a1c32", + "sha256:cd54895e4ae7d32f1e3dd91261df46ee7483a735017dc6f987904f194aa5fd14", + "sha256:d1323cd04d6e92150bcc79d0174ce347ed4b349d748b9358fd2e497b121e03c8", + "sha256:d383bf5e045d7f9d239b38e6acadd7b7fdf6c0087259a84ae3475d18e9a2ae8b", + "sha256:d3e7420211f5a65a54675fd860ea04173cde60a7cc20ccfbafcccd155225f8bc", + "sha256:d8074c5dd61c8a3e915fa8fc04754fa55cfa5978200d2daa1e2d4294c1f136aa", + "sha256:df03cd88f95b1b99052b52b1bb92173229d7a674df0ab06d2b25765ee8404bce", + "sha256:e45377d5d6fefe1677da2a2c07b024a6dac782088e37c0b1efea4cfe2b1be19b", + "sha256:e53d19c2bf7d0d1e6998a7e693c7e87300dd971808e6618964621ccd0e01fe4e", + "sha256:e560fd75aaf3e5693b91bcaddd8b314f4d57e99aef8a6c6dc692f935cc1e6bbf", + "sha256:ec5060592d83454e8063e487696ac3783cc48c9a329498bafae0d972bc7816c9", + "sha256:ecc2920630283e0783c22e2ac94427f8cca29a04cfdf331467d4f661f4072dac", + "sha256:ed7161bccab7696a473fe7ddb619c1d75963732b37da4618ba12e60899fefe4f", + "sha256:ee0bd3a7b2e184e88d25c9baa6a9dc609ba25b76daae942edfb14499ac7ec374", + "sha256:ee25f1ac091def37c4b59d192bbe3a206298feeb89132a470325bf76ad122a1e", + "sha256:efa44f64c37cc30c9f05932c740a8b40ce359f51882c70883cc95feac842da4d", + "sha256:f47d52fd9b2ac418c4890aad2f6d21a6b96183c98021f0a48497a904199f006e", + "sha256:f857034dc68d5ceb30fb60afb6ff2103087aea10a01b613985610e007053a121", + "sha256:fb91d20fa2d3b13deea98a690534697742029f4fb83673a3501ae6e3746508b5", + "sha256:fddb8870bdb83456a489ab67c6b3040a8d5a55069aa6f72f9d872235fbc52f54" + ], + "markers": "python_version >= '3.9'", + "version": "==0.3.0" + }, "python-crontab": { "hashes": [ "sha256:40067d1dd39ade3460b2ad8557c7651514cd3851deffff61c5c60e1227c5c36b", @@ -704,30 +998,93 @@ ], "version": "==0.2.13" }, - "websockets": { - "hashes": [ - "sha256:09dfec40e9b73e8808c39ecdbc1733e33915a2b26b90c54566afc0af546a9ec3", - "sha256:2aa6d52264cecb08d39741e8fda49f5ac4872aef02617230c84d02e861f3cc5a", - "sha256:2f5b7f3920f29609086fb0b63552bb1f86a04b8cbdcc0dbf3775cc90d489dfc8", - "sha256:3d38f76f71654268e5533b45df125ff208fee242a102d4b5ca958da5cf5fb345", - "sha256:3fcc7dfb365e81ff8206f950c86d1e73accdf3be2f9110c0cb73be32d2e7a9a5", - "sha256:4128212ab6f91afda03a0c697add261bdf6946b47928db83f07298ea2cd8d937", - "sha256:43e5b9f51dd0000a4c6f646e2ade0c886bd14a784ffac08b9e079bd17a63bcc5", - "sha256:4a932c17cb11c361c286c04842dc2385cc7157019bbba8b64808acbc89a95584", - "sha256:5ddc5fc121eb76771e990f071071d9530e27d20e8cfb804d9f5823de055837af", - "sha256:7347af28fcc70eb45be409760c2a428f8199e7f73c04a621916c3c219ed7ad27", - "sha256:85ae1e4b36aa2e90de56d211d2de36d7c093d00277a9afdd9b4f81e69c0214ab", - "sha256:8a29100079f5b91a72bcd25d35a7354db985d3babae42d00b9d629f9a0aaa8ac", - "sha256:a7e7585c8e3c0f9277ad7d6ee6ccddc69649cd216255d5e255d68f90482aeefa", - "sha256:aa42ecef3aed807e23218c264b1e82004cdd131a6698a10b57fc3d8af8f651fc", - "sha256:b19e7ede1ba80ee9de6f5b8ccd31beee25402e68bef7c13eeb0b8bc46bc4b7b7", - "sha256:c4c5b5ce2d66cb0cf193c14bc9726adca095febef0f7b2c04e5e3fa3487a97a4", - "sha256:de743ef26b002efceea7d7756e99e5d38bf5d4f27563b8d27df2a9a5cc57340a", - "sha256:e1e568136ad5cb6768504be36d470a136b072acbf3ea882303aee6361be01941", - "sha256:e8992f1db371f2a1c5af59e032d9dc7c1aa92f16241efcda695b7d955b4de0c2", - "sha256:e9c1cdbb591432c59d0b5ca64fd30b6d517024767f152fc169563b26e7bcc9da" - ], - "version": "==3.4" + "yarl": { + "hashes": [ + "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba", + "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193", + "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318", + "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee", + "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e", + "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1", + "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a", + "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186", + "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1", + "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50", + "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640", + "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb", + "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8", + "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc", + "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5", + "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58", + "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2", + "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393", + "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24", + "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b", + "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910", + "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c", + "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272", + "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed", + "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1", + "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04", + "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d", + "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5", + "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d", + "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889", + "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae", + "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b", + "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c", + "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576", + "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34", + "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477", + "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990", + "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2", + "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512", + "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069", + "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a", + "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6", + "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0", + "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8", + "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb", + "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa", + "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8", + "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e", + "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e", + "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985", + "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8", + "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1", + "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5", + "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690", + "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10", + "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789", + "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b", + "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca", + "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e", + "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5", + "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59", + "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9", + "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8", + "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db", + "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde", + "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7", + "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb", + "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3", + "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6", + "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285", + "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb", + "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8", + "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482", + "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd", + "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75", + "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760", + "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782", + "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53", + "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2", + "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1", + "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719", + "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62" + ], + "markers": "python_version >= '3.9'", + "version": "==1.18.3" } }, "develop": {} diff --git a/requirements-dev.txt b/requirements-dev.txt index 26dbc86..1ae8028 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -17,7 +17,7 @@ cron-descriptor==1.4.0 defusedxml==0.7.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' deprecated==1.2.14; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' diff-match-patch==20230430; python_version >= '3.7' -discord.py==1.7.3 +discord.py==2.5.0 django==4.2.4 django-celery-beat==2.5.0 django-hashid-field==3.3.7 diff --git a/src/announcements/tasks.py b/src/announcements/tasks.py index 0d8721e..4c53691 100644 --- a/src/announcements/tasks.py +++ b/src/announcements/tasks.py @@ -5,7 +5,7 @@ from celery import shared_task from celery.utils.log import get_task_logger -from discord import Webhook, RequestsWebhookAdapter, Embed, InvalidArgument +from discord import Webhook, Embed from .models import Announcement from contestsuite.settings import ANNOUNCEMENT_WEBHOOK_URL, DEFAULT_FROM_EMAIL, ALLOWED_HOSTS @@ -61,22 +61,19 @@ def discord_announcement(id): except: logger.error(f'Failed to fetch announcement with id {id}') else: - try: - # Initializing webhook - webhook = Webhook.from_url( - ANNOUNCEMENT_WEBHOOK_URL, adapter=RequestsWebhookAdapter()) - except InvalidArgument: - logger.error('Failed to connect to announcement webhook') + # Initializing webhook + # webhook = Webhook.from_url( + # ANNOUNCEMENT_WEBHOOK_URL, adapter=RequestsWebhookAdapter()) + webhook = Webhook.SyncWebHook.from_url(ANNOUNCEMENT_WEBHOOK_URL) + url = 'https://'+ALLOWED_HOSTS[0]+announcement.get_absolute_url() + + if len(announcement.content) <= 140: + content = announcement.content else: - url = 'https://'+ALLOWED_HOSTS[0]+announcement.get_absolute_url() - - if len(announcement.content) <= 140: - content = announcement.content - else: - content = announcement.content[:140] + '...' - - # Initializing an Embed - embed = Embed(title=announcement.title, description=content, url=url) + content = announcement.content[:140] + '...' + + # Initializing an Embed + embed = Embed(title=announcement.title, description=content, url=url) - # Executing webhook. - webhook.send(embed=embed) + # Executing webhook. + webhook.send(embed=embed) diff --git a/src/contestadmin/tasks.py b/src/contestadmin/tasks.py index e6a413e..49bb5c5 100644 --- a/src/contestadmin/tasks.py +++ b/src/contestadmin/tasks.py @@ -3,8 +3,6 @@ from itertools import islice from math import ceil, log10 -from discord import Webhook, RequestsWebhookAdapter, InvalidArgument - from django.contrib.auth.models import User from django.core.mail import send_mass_mail from django.db import transaction From f7225a3d216d39060965252d7bfa5cb5cf994fab Mon Sep 17 00:00:00 2001 From: hoangvu5 Date: Thu, 6 Mar 2025 09:43:25 -0500 Subject: [PATCH 12/18] Fix Webhook implementation --- src/announcements/tasks.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/announcements/tasks.py b/src/announcements/tasks.py index 4c53691..38ea884 100644 --- a/src/announcements/tasks.py +++ b/src/announcements/tasks.py @@ -5,7 +5,7 @@ from celery import shared_task from celery.utils.log import get_task_logger -from discord import Webhook, Embed +from discord import SyncWebhook, Embed from .models import Announcement from contestsuite.settings import ANNOUNCEMENT_WEBHOOK_URL, DEFAULT_FROM_EMAIL, ALLOWED_HOSTS @@ -62,9 +62,7 @@ def discord_announcement(id): logger.error(f'Failed to fetch announcement with id {id}') else: # Initializing webhook - # webhook = Webhook.from_url( - # ANNOUNCEMENT_WEBHOOK_URL, adapter=RequestsWebhookAdapter()) - webhook = Webhook.SyncWebHook.from_url(ANNOUNCEMENT_WEBHOOK_URL) + webhook = SyncWebhook.from_url(ANNOUNCEMENT_WEBHOOK_URL) url = 'https://'+ALLOWED_HOSTS[0]+announcement.get_absolute_url() if len(announcement.content) <= 140: From 1c61be38a883eeff17873913f80ca7552244fb58 Mon Sep 17 00:00:00 2001 From: hoangvu5 Date: Fri, 7 Mar 2025 14:10:20 -0500 Subject: [PATCH 13/18] Remove unused environment variables in docker-compose.yml --- deploy/docker-compose.yml | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 52d55f3..ff3477e 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -14,9 +14,6 @@ services: SQL_DATABASE: contestsuite SQL_USER: contestadmin SQL_PASSWORD: seminoles1! - - # Discord - GUILD_ID: # Discord Server ID ports: - 8000:8000 volumes: @@ -29,29 +26,6 @@ services: - rabbitmq - celery_worker restart: unless-stopped - scrape_bot: - image: contestsuite:dev - command: /docker/start.sh bot - environment: - # Django - DEBUG: 'True' - - # Database - SQL_DATABASE: contestsuite - SQL_USER: contestadmin - SQL_PASSWORD: seminoles1! - - # Discord - BOT_CHANNEL: # Name of command channel - GUILD_ID: # Discord Server ID - SCRAPE_BOT_TOKEN: # Token for the member list scraping bot - volumes: - - ../src:/app - networks: - - contestsuite - depends_on: - - mariadb - - django celery_worker: image: contestsuite:dev command: /docker/start.sh worker debug @@ -66,7 +40,6 @@ services: # Discord ANNOUNCEMENT_WEBHOOK_URL: # Webhook URL of the contest announcements channel - BOT_CHANNEL_WEBHOOK_URL: # Webhook URL of the bot command channel volumes: - ../src:/app networks: From 04d93e5aa7b16d218bd6efbb323df0aec98ce1d5 Mon Sep 17 00:00:00 2001 From: hoangvu5 Date: Fri, 7 Mar 2025 14:10:41 -0500 Subject: [PATCH 14/18] Remove unused environment variables in docker-compose.md --- docs/deployment/docker/docker_compose.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/deployment/docker/docker_compose.md b/docs/deployment/docker/docker_compose.md index 490e68f..cfa9ed8 100644 --- a/docs/deployment/docker/docker_compose.md +++ b/docs/deployment/docker/docker_compose.md @@ -25,9 +25,6 @@ services: SQL_DATABASE: contestsuite SQL_USER: contestadmin SQL_PASSWORD: seminoles1! - - # Discord - GUILD_ID: # Discord Server ID ports: - 8000:8000 volumes: @@ -54,7 +51,6 @@ services: # Discord ANNOUNCEMENT_WEBHOOK_URL: # Webhook URL of the contest announcements channel - BOT_CHANNEL_WEBHOOK_URL: # Webhook URL of the bot command channel volumes: - ../src:/app networks: From d67c20ed659c0f600935edd28702d1b564afe4ab Mon Sep 17 00:00:00 2001 From: hoangvu5 Date: Fri, 7 Mar 2025 14:10:58 -0500 Subject: [PATCH 15/18] Remove bot.py references --- CONTRIBUTING.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8205eab..9a2d49c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -61,7 +61,6 @@ Programming-Contest-Suite/ ├── register/ ├── static/ ├── templates/ - ├── bot.py └── manage.py ``` @@ -77,7 +76,6 @@ Programming-Contest-Suite/ - `register`: user account registration and team creation - `static`: target directory for all project static files upon deployment (placeholder dir) - `templates`: target directory for all project HTML templates upon deployment -- `bot.py`: Discord bot which assists in LFG profile verification - `manage.py`: Django management entrypoint ## Testing & Development Server From 12c5c8938fb73cecfe686626eef2a0067f9b0fee Mon Sep 17 00:00:00 2001 From: hoangvu5 Date: Fri, 7 Mar 2025 14:11:13 -0500 Subject: [PATCH 16/18] Remove bot in start.sh --- scripts/docker/start.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/scripts/docker/start.sh b/scripts/docker/start.sh index 81944fd..37008a5 100644 --- a/scripts/docker/start.sh +++ b/scripts/docker/start.sh @@ -1,7 +1,7 @@ #!/bin/bash if [ $# -eq 0 ]; then - echo "Usage: start.sh [PROCESS_TYPE](server | worker | beat | flower | bot)" + echo "Usage: start.sh [PROCESS_TYPE](server | worker | beat | flower)" exit 1 fi @@ -74,10 +74,7 @@ elif [ "$PROCESS_TYPE" = "flower" ]; then --loglevel INFO \ --conf=contestsuite/flowerconfig.py fi -elif [ "$PROCESS_TYPE" = "bot" ]; then - python \ - bot.py else - echo "Invalid [PROCESS_TYPE](server | worker | beat | flower | bot)" + echo "Invalid [PROCESS_TYPE](server | worker | beat | flower)" exit 1 fi From 4a39419943cd58b724ea083dcbef220ce1105010 Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Wed, 19 Mar 2025 15:20:19 -0400 Subject: [PATCH 17/18] Update incorrect footnote in configuration --- docs/deployment/configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/deployment/configuration.md b/docs/deployment/configuration.md index 91d894a..13baf7b 100644 --- a/docs/deployment/configuration.md +++ b/docs/deployment/configuration.md @@ -109,7 +109,7 @@ ANNOUNCEMENT_WEBHOOK_URL | None | URL of Discord server's announcement channel w ## Misc -The following variables, located in the main settings file[^2], map to miscellaneous PCS specific settings. A link to relevant documentation is provided for each variable. +The following variables, located in the main settings file[^1], map to miscellaneous PCS specific settings. A link to relevant documentation is provided for each variable. Variable | Default | Description ---|---|--- From 3a0097ec32c74d8757735ce4b2b0cfeded14075a Mon Sep 17 00:00:00 2001 From: getsbuffer Date: Wed, 19 Mar 2025 15:23:54 -0400 Subject: [PATCH 18/18] Update docker image documentation related to running the image --- docs/deployment/docker/docker_image.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/deployment/docker/docker_image.md b/docs/deployment/docker/docker_image.md index 6a3d546..32c8250 100644 --- a/docs/deployment/docker/docker_image.md +++ b/docs/deployment/docker/docker_image.md @@ -24,7 +24,7 @@ REQUIREMENTS | requirements.txt | Path to the manifest file to use during image ## Run Image -The `Dockerfile` specifies an image capable of running the Django web app with Celery. The parameters passed to the image's start script `start.sh` determine the container's behavior. +The `Dockerfile` specifies an image capable of running the Django web app, Celery, or Flower. The parameters passed to the image's start script `start.sh` determine the container's behavior. ```bash docker run /docker/start.sh