Pre-Deployment Still bugged as hell.
This commit is contained in:
parent
e30e89e7e3
commit
7916b1fca6
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,5 +1,8 @@
|
|||||||
db/*
|
db/*
|
||||||
|
|
||||||
|
**/data/*.yml
|
||||||
|
!**/data/config_blueprint.yml
|
||||||
|
|
||||||
# ---> Python
|
# ---> Python
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
@ -204,3 +204,5 @@ Programming around this will need a further layer of complexity, involving flags
|
|||||||
|
|
||||||
I have set the member verification prompt to use a global listener to avoid a situation where it creates several backlogged processes when multiple people post sign-ups at the same time.
|
I have set the member verification prompt to use a global listener to avoid a situation where it creates several backlogged processes when multiple people post sign-ups at the same time.
|
||||||
This should also mean that the sign-up prompts should persist over reboots.
|
This should also mean that the sign-up prompts should persist over reboots.
|
||||||
|
The best possible way of setting this up is probably using functions to dynamically set up and remove component call-backs.
|
||||||
|
Also components do not need to all have unique names, just unique names in the message they are part of.
|
||||||
|
123
TODO.md
123
TODO.md
@ -1,7 +1,7 @@
|
|||||||
# To Do
|
# To Do
|
||||||
|
|
||||||
- [ ] Testing
|
- [ ] Testing
|
||||||
- [ ] Dockerise
|
- [x] Dockerise
|
||||||
- [ ] Infer/Transfer data from old bot
|
- [ ] Infer/Transfer data from old bot
|
||||||
- [ ] Deploy
|
- [ ] Deploy
|
||||||
|
|
||||||
@ -10,9 +10,7 @@
|
|||||||
- [x] Simplify directory tree
|
- [x] Simplify directory tree
|
||||||
- [x] Split event listeners into individual cogs.
|
- [x] Split event listeners into individual cogs.
|
||||||
- [x] Update with re-organised data and config structure
|
- [x] Update with re-organised data and config structure
|
||||||
|
- [x] Correct references to data in existing cogs.
|
||||||
> - [x] Correct references to data in existing cogs.
|
|
||||||
|
|
||||||
- [x] Setup minimally functioning configs of guild on startup
|
- [x] Setup minimally functioning configs of guild on startup
|
||||||
- [x] Synchronise core configuration `/commands` on startup
|
- [x] Synchronise core configuration `/commands` on startup
|
||||||
- [ ] ~~Synchronise secondary `/commands` on complete configuration~~ ``(see below)``
|
- [ ] ~~Synchronise secondary `/commands` on complete configuration~~ ``(see below)``
|
||||||
@ -29,44 +27,28 @@
|
|||||||
- [x] Delete Dev/Test Functions
|
- [x] Delete Dev/Test Functions
|
||||||
- [x] Error handlers
|
- [x] Error handlers
|
||||||
- [x] Debug Features
|
- [x] Debug Features
|
||||||
|
- [ ] ~~Command Installer/Uninstaller~~
|
||||||
> - [ ] ~~Command Installer/Uninstaller~~
|
|
||||||
|
|
||||||
- [x] Help Channel Event Listener
|
- [x] Help Channel Event Listener
|
||||||
|
- [x] Add Config key for Help Channel
|
||||||
> - [x] Add Config key for Help Channel
|
|
||||||
|
|
||||||
- [ ] ~~Slash Command Buttons or~~ `This kind of got subsumed into other features.`
|
- [ ] ~~Slash Command Buttons or~~ `This kind of got subsumed into other features.`
|
||||||
- [ ] ~~Reaction listener selectors~~ `So did this.`
|
- [ ] ~~Reaction listener selectors~~ `So did this.`
|
||||||
- [x] Member Verification
|
- [x] Member Verification
|
||||||
|
- [x] Add Config key membership signup channels
|
||||||
> - [x] Add Config key membership signup channels
|
- [x] Add config keys: Membership Category Roles
|
||||||
> - [x] Add config keys: Membership Category Roles
|
- [x] Message Receive listener
|
||||||
> - [x] Message Receive listener
|
- [x] ~~Message React listener~~ or buttons `Used buttons waiting within the same command thread. Possibly update to global listener if performance is affected.`
|
||||||
> - [x] ~~Message React listener~~ or buttons `Used buttons waiting within the same command thread. Possibly update to global listener if performance is affected.`
|
|
||||||
|
|
||||||
- [x] Membership Restriction
|
- [x] Membership Restriction
|
||||||
|
- [x] Message Receive Listener
|
||||||
> - [x] Message Receive Listener
|
- [x] Membership Validation Listener
|
||||||
> - [x] Membership Validation Listener
|
|
||||||
|
|
||||||
- [x] Re-synchronise commands after any relevant config changes `(See from above)`
|
- [x] Re-synchronise commands after any relevant config changes `(See from above)`
|
||||||
|
- [ ] Role Delete (~~member~~, ~~admin~~, ~~game~~) `Admin role missing won't cause any issues as server role will still remain in control`
|
||||||
> - [ ] Role Delete (~~member~~, ~~admin~~, ~~game~~) `Admin role missing won't cause any issues as server role will still remain in control`
|
|
||||||
|
|
||||||
`Deleting membership roles will also trigger a mess. Event listener will trigger and attempt to execute simultaneously with the command to delete the role, which will cascade into several errors. In order to make this work, it is best to have the commands interact solely with the roles, and then subsequently the listeners to sync with the data.`
|
`Deleting membership roles will also trigger a mess. Event listener will trigger and attempt to execute simultaneously with the command to delete the role, which will cascade into several errors. In order to make this work, it is best to have the commands interact solely with the roles, and then subsequently the listeners to sync with the data.`
|
||||||
|
- [ ] ~~Channel delete (notifications, logs, game text channel)~~ `There aren't any critical settings that depend on this just yet, and it is hard to set this up without circularity`
|
||||||
> - [ ] ~~Channel delete (notifications, logs, game text channel)~~ `There aren't any critical settings that depend on this just yet, and it is hard to set this up without circularity`
|
- [ ] ~~Category delete (games)~~ `Circularity problem: if the category delete event listener is set up, it will react to the bot deleting categories when managing games.`
|
||||||
> - [ ] ~~Category delete (games)~~ `Circularity problem: if the category delete event listener is set up, it will react to the bot deleting categories when managing games.`
|
- [x] Flag for checking completeness of configuration for a guild.
|
||||||
|
- [x] Function for checking configs for completeness
|
||||||
- [x] Flag for checking completeness of configuration for a guild.
|
|
||||||
|
|
||||||
> - [x] Function for checking configs for completeness
|
|
||||||
|
|
||||||
- [ ] ~~Synchronise game channel on role updates~~
|
- [ ] ~~Synchronise game channel on role updates~~
|
||||||
|
- [ ] ~~Exception to event listener to prevent circularity~~ ~~`unsure what this means`~~
|
||||||
> - [ ] ~~Exception to event listener to prevent circularity~~ ~~`unsure what this means`~~
|
|
||||||
|
|
||||||
`I remember what this is now: if you have a listener for when roles get deleted, and if the bot deletes a role, then it triggers the listener. It might be worth restructuring this such that the Bot command only deletes the role, which then triggers the listener that deletes the categories and synchronises data. That way, the roles can be deleted manually or via the command. Otherwise, it is not possible in the Discord API to have this exception, as the Bot only responds to the 'Guild' deleting the role, not the user or bot or admin that issued the command.`
|
`I remember what this is now: if you have a listener for when roles get deleted, and if the bot deletes a role, then it triggers the listener. It might be worth restructuring this such that the Bot command only deletes the role, which then triggers the listener that deletes the categories and synchronises data. That way, the roles can be deleted manually or via the command. Otherwise, it is not possible in the Discord API to have this exception, as the Bot only responds to the 'Guild' deleting the role, not the user or bot or admin that issued the command.`
|
||||||
|
|
||||||
## Event Listeners
|
## Event Listeners
|
||||||
@ -80,57 +62,46 @@
|
|||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
- [x] Configure Bot function and sub commands
|
- [x] Configure Bot function and sub commands
|
||||||
|
- [x] botrole (role group)
|
||||||
> - [x] botrole (role group)
|
- [x] committeerole (role group)
|
||||||
> - [x] committeerole (role group)
|
- [x] modchannel (channel group)
|
||||||
> - [x] modchannel (channel group)
|
- [x] help channel (channel group)
|
||||||
> - [x] help channel (channel group)
|
- [x] signup channel (channel group)
|
||||||
> - [x] signup channel (channel group)
|
- [x] newcomer role (role group)
|
||||||
> - [x] newcomer role (role group)
|
- [x] returning player role (role group)
|
||||||
> - [x] returning player role (role group)
|
- [x] student role (role group)
|
||||||
> - [x] student role (role group)
|
- [x] help notifications (notification group)
|
||||||
> - [x] help notifications (notification group)
|
- [x] signup notifications (notification group)
|
||||||
> - [x] signup notifications (notification group)
|
|
||||||
|
|
||||||
- [x] Set up timeslots
|
- [x] Set up timeslots
|
||||||
- [x] Delete timeslots
|
- [x] Delete timeslots
|
||||||
|
- [x] Base command
|
||||||
> - [x] Base command
|
- [x] ~~Delete all games with the timeslot~~
|
||||||
> - [x] ~~Delete all games with the timeslot~~
|
|
||||||
Do the opposite: block deleting timeslots with existing games.
|
Do the opposite: block deleting timeslots with existing games.
|
||||||
|
|
||||||
- [x] List timeslots
|
- [x] List timeslots
|
||||||
- [x] Set up command permissions
|
- [x] Set up command permissions
|
||||||
|
- [x] Slash Commands
|
||||||
> - [x] Slash Commands
|
- [x] Admin Commands
|
||||||
|
- [x] Game Management Commands
|
||||||
>> - [x] Admin Commands
|
- [x] Native Bot Commands
|
||||||
>> - [x] Game Management Commands
|
|
||||||
|
|
||||||
> - [x] Native Bot Commands
|
|
||||||
|
|
||||||
- [x] Migrate existing bot commands
|
- [x] Migrate existing bot commands
|
||||||
|
- [x] setupgame
|
||||||
> - [x] setupgame
|
- [x] ~~definebotrole~~ config
|
||||||
> - [x] ~~definebotrole~~ config
|
- [x] deletegame
|
||||||
> - [x] deletegame
|
- [x] ~~reset~~ purge
|
||||||
> - [x] ~~reset~~ purge
|
- [ ] ~~migrate~~ `See above`
|
||||||
> - [ ] ~~migrate~~ `See above`
|
- [x] ~~kickplayer~~ `/player remove`
|
||||||
> - [x] ~~kickplayer~~ `/player remove`
|
- [x] ~~addplayer~~ `/player add`
|
||||||
> - [x] ~~addplayer~~ `/player add`
|
- [x] ~~leavegame~~ `/player leave`
|
||||||
> - [x] ~~leavegame~~ `/player leave`
|
- [x] Pitch command and sub-commands
|
||||||
> - [x] Pitch command and sub-commands
|
- [ ] ~~run~~ `Combined both sub-commands into single command and prompt response.`
|
||||||
|
- [ ] ~~clear~~
|
||||||
> > - [ ] ~~run~~ `Combined both sub-commands into single command and prompt response.`
|
|
||||||
> > - [ ] ~~clear~~
|
|
||||||
|
|
||||||
## Misc
|
## Misc
|
||||||
|
|
||||||
- [x] Review documentation
|
- [x] Review documentation
|
||||||
|
- [x] Finalise README.md
|
||||||
> - [x] Finalise README.md
|
- [x] CHANGELOG.md
|
||||||
> - [x] CHANGELOG.md
|
- [x] COMMANDS.md
|
||||||
> - [x] COMMANDS.md
|
- [x] resources.md
|
||||||
> - [x] resources.md
|
|
||||||
|
|
||||||
- [x] Make sure to document `not using discord_components and staying with discord-py-slash-commands library alone`.
|
- [x] Make sure to document `not using discord_components and staying with discord-py-slash-commands library alone`.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM python:3.8.6-buster
|
FROM python:3.9.6-alpine
|
||||||
COPY . /usr/src/app
|
COPY . /usr/src/app
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
RUN pip install --upgrade pip
|
RUN pip install --upgrade pip
|
||||||
|
15
app/bot.py
15
app/bot.py
@ -60,13 +60,12 @@ if len(set(l)) != len(l): raise Exception('Config Error: there is a clash betwee
|
|||||||
# Locate Cogs Directory
|
# Locate Cogs Directory
|
||||||
cogsDir = 'cogs'
|
cogsDir = 'cogs'
|
||||||
|
|
||||||
# --> Temporary disable logging because of verboseness.
|
## Logging configuration imported boilerplate from Discord Py Docs
|
||||||
# ## Logging configuration imported boilerplate from Discord Py Docs
|
logger = logging.getLogger('discord')
|
||||||
# logger = logging.getLogger('discord')
|
logger.setLevel(logging.DEBUG)
|
||||||
# logger.setLevel(logging.DEBUG)
|
handler = logging.FileHandler(filename='discord.log', encoding='utf-8', mode='w')
|
||||||
# handler = logging.FileHandler(filename='discord.log', encoding='utf-8', mode='w')
|
handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(message)s'))
|
||||||
# handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(message)s'))
|
logger.addHandler(handler)
|
||||||
# logger.addHandler(handler)
|
|
||||||
|
|
||||||
#### Dynamic Prefixes
|
#### Dynamic Prefixes
|
||||||
def getPrefix(client, message):
|
def getPrefix(client, message):
|
||||||
@ -285,4 +284,4 @@ if yaml_load(configFile):
|
|||||||
if any([len(yaml_load(configFile)[x]['membership']) > 0 for x in yaml_load(configFile)]):
|
if any([len(yaml_load(configFile)[x]['membership']) > 0 for x in yaml_load(configFile)]):
|
||||||
loadCog(f'./{cogsDir}/slashcommands/secondary/edit_membership.py')
|
loadCog(f'./{cogsDir}/slashcommands/secondary/edit_membership.py')
|
||||||
|
|
||||||
client.run(os.getenv('TEST_3_TOKEN'))
|
client.run(os.getenv('BOT_TOKEN'))
|
@ -69,7 +69,7 @@ class Migrate(commands.Cog, name='Migrate Command'):
|
|||||||
await r.edit(
|
await r.edit(
|
||||||
reason=f'`migrate` command issued by {ctx.author.display_name}',
|
reason=f'`migrate` command issued by {ctx.author.display_name}',
|
||||||
mentionable=True,
|
mentionable=True,
|
||||||
colour=discord.Colour.green
|
colour=discord.Colour.green()
|
||||||
)
|
)
|
||||||
c = discord.utils.get(ctx.guild.categories, name=r.name)
|
c = discord.utils.get(ctx.guild.categories, name=r.name)
|
||||||
if c is None:
|
if c is None:
|
||||||
|
@ -97,7 +97,7 @@ class Configuration(commands.Cog, name='Configuration Commands'):
|
|||||||
permissions=discord.Permissions(administrator=True) if key == 'committee' else discord.Permissions().none(),
|
permissions=discord.Permissions(administrator=True) if key == 'committee' else discord.Permissions().none(),
|
||||||
reason=f'`/config roles` command issued by {ctx.author.display_name}',
|
reason=f'`/config roles` command issued by {ctx.author.display_name}',
|
||||||
colour = discord.Colour.orange() if key == 'bot' else discord.Colour.blue() if key == 'committee' else discord.Colour.default(),
|
colour = discord.Colour.orange() if key == 'bot' else discord.Colour.blue() if key == 'committee' else discord.Colour.default(),
|
||||||
hoist=True if key == 'committee' else None,
|
hoist=True if key == 'committee' or key == 'bot' else None,
|
||||||
)
|
)
|
||||||
conf = yaml_load(configFile)
|
conf = yaml_load(configFile)
|
||||||
guildStr = str(ctx.guild.id)
|
guildStr = str(ctx.guild.id)
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
'864651943820525609':
|
|
||||||
'868506573700468787': 868506572421234718
|
|
||||||
'868506638720577586': 868506637252583494
|
|
||||||
'868506722187227166': 868506720375300137
|
|
@ -1,26 +0,0 @@
|
|||||||
'864651943820525609':
|
|
||||||
channels:
|
|
||||||
help: 866645822472454206
|
|
||||||
mod: 865348933022515220
|
|
||||||
signup: 868523157680693278
|
|
||||||
configured: true
|
|
||||||
membership:
|
|
||||||
- 866795009121714207
|
|
||||||
name: Test
|
|
||||||
notifications:
|
|
||||||
help: true
|
|
||||||
signup: true
|
|
||||||
owner: 493694762210033664
|
|
||||||
prefix: '-'
|
|
||||||
restrict: false
|
|
||||||
roles:
|
|
||||||
admin:
|
|
||||||
- 866642278529368095
|
|
||||||
bot: 866639184121954305
|
|
||||||
committee: 866642278529368095
|
|
||||||
newcomer: 866645308091138060
|
|
||||||
returning_player: 866645365524660224
|
|
||||||
student: 866645394699714570
|
|
||||||
timeslots:
|
|
||||||
avatar: Avatar Time
|
|
||||||
shera: She Ra Time
|
|
@ -1,38 +0,0 @@
|
|||||||
'864651943820525609':
|
|
||||||
avatar:
|
|
||||||
'868506572421234718':
|
|
||||||
category: 868506573700468787
|
|
||||||
current_players: 1
|
|
||||||
game_title: Kyoshi
|
|
||||||
gm: 864649599671205914
|
|
||||||
header_message: 868506578934976543
|
|
||||||
max_players: 5
|
|
||||||
min_players: null
|
|
||||||
platform: null
|
|
||||||
role: 868506572421234718
|
|
||||||
system: null
|
|
||||||
text_channel: 868506576695230534
|
|
||||||
'868506637252583494':
|
|
||||||
category: 868506638720577586
|
|
||||||
current_players: 0
|
|
||||||
game_title: Roku
|
|
||||||
gm: 864649599671205914
|
|
||||||
header_message: 868506642545795142
|
|
||||||
max_players: 5
|
|
||||||
min_players: null
|
|
||||||
platform: null
|
|
||||||
role: 868506637252583494
|
|
||||||
system: null
|
|
||||||
text_channel: 868506640347971655
|
|
||||||
'868506720375300137':
|
|
||||||
category: 868506722187227166
|
|
||||||
current_players: 0
|
|
||||||
game_title: Aang
|
|
||||||
gm: 864649599671205914
|
|
||||||
header_message: 868506726029197312
|
|
||||||
max_players: 5
|
|
||||||
min_players: null
|
|
||||||
platform: null
|
|
||||||
role: 868506720375300137
|
|
||||||
system: null
|
|
||||||
text_channel: 868506724045303878
|
|
@ -1,5 +0,0 @@
|
|||||||
'864651943820525609':
|
|
||||||
'864649599671205914':
|
|
||||||
- 868506572421234718
|
|
||||||
- 868506637252583494
|
|
||||||
- 868506720375300137
|
|
@ -1,19 +0,0 @@
|
|||||||
'864651943820525609':
|
|
||||||
'868506572421234718':
|
|
||||||
category: 868506573700468787
|
|
||||||
game_title: Kyoshi
|
|
||||||
gm: 864649599671205914
|
|
||||||
text_channel: 868506576695230534
|
|
||||||
time: avatar
|
|
||||||
'868506637252583494':
|
|
||||||
category: 868506638720577586
|
|
||||||
game_title: Roku
|
|
||||||
gm: 864649599671205914
|
|
||||||
text_channel: 868506640347971655
|
|
||||||
time: avatar
|
|
||||||
'868506720375300137':
|
|
||||||
category: 868506722187227166
|
|
||||||
game_title: Aang
|
|
||||||
gm: 864649599671205914
|
|
||||||
text_channel: 868506724045303878
|
|
||||||
time: avatar
|
|
@ -1 +0,0 @@
|
|||||||
{}
|
|
@ -8,7 +8,7 @@ from discord_slash import SlashCommand, SlashContext, cog_ext, utils # Slash C
|
|||||||
from discord_slash.utils.manage_commands import create_choice, create_option # Slash Command features
|
from discord_slash.utils.manage_commands import create_choice, create_option # Slash Command features
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
||||||
from bot import clearConfig, configFile, loadCog, loadCogs, setConfig, unloadCog, unloadCogs, yaml_dump, yaml_load, reloadCog, reloadCogs
|
from bot import clearConfig, configFile, loadCog, loadCogs, setConfig, unloadCog, unloadCogs, yaml_dump, yaml_load, reloadCog, reloadCogs, pitchesFile, cogsDir
|
||||||
|
|
||||||
##### Debug Cog
|
##### Debug Cog
|
||||||
class Debug(commands.Cog, name='Debug Commands'):
|
class Debug(commands.Cog, name='Debug Commands'):
|
||||||
@ -152,5 +152,17 @@ class Debug(commands.Cog, name='Debug Commands'):
|
|||||||
await self.client.slash.sync_all_commands()
|
await self.client.slash.sync_all_commands()
|
||||||
await ctx.reply(f'```All slash commands have been synced with the Server.```')
|
await ctx.reply(f'```All slash commands have been synced with the Server.```')
|
||||||
|
|
||||||
|
@commands.command(
|
||||||
|
name='pitchreset',
|
||||||
|
description='Debug feature that resets the pitches in case of any error. Clears pitch disables Pitch listeners.',
|
||||||
|
brief='Reset running pitches.',
|
||||||
|
aliases=['resetpitches', 'resetpitch']
|
||||||
|
)
|
||||||
|
async def _pitchreset(self, ctx:commands.Context):
|
||||||
|
yaml_dump({}, pitchesFile)
|
||||||
|
if self.client.get_cog('Pitch Listener') is not None:
|
||||||
|
unloadCog(f'./{cogsDir}/events/secondary/pitch_listener.py')
|
||||||
|
await ctx.reply('```Pitches have been hard reset.```')
|
||||||
|
|
||||||
def setup(client):
|
def setup(client):
|
||||||
client.add_cog(Debug(client))
|
client.add_cog(Debug(client))
|
@ -5,8 +5,4 @@ services:
|
|||||||
build: ./app
|
build: ./app
|
||||||
volumes:
|
volumes:
|
||||||
- ./app:/usr/src/app
|
- ./app:/usr/src/app
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
|
||||||
- BOT_TOKEN=${BOT_TOKEN}
|
|
||||||
- TEST_TOKEN=${TEST_TOKEN}
|
|
||||||
- BOT_VERSION=${BOT_VERSION}
|
|
Loading…
Reference in New Issue
Block a user