Compare commits

..

4 Commits

Author SHA1 Message Date
44236eacec l 132 indentation error 2022-01-22 13:57:07 +00:00
be43d3e03a Added coroutine to defer response to interaction
This should compensate for the lag in the bot and fix the menu bug
2022-01-22 13:54:02 +00:00
f5097a9d2d Defined specific version number for image
Later images break wheel again.
2022-01-21 21:37:24 +00:00
42cf3afcb4 Bugfix: membership restriction scanning non-game servers 2022-01-21 21:24:44 +00:00
9 changed files with 21 additions and 41 deletions

1
.gitignore vendored
View File

@ -162,4 +162,3 @@ app/run_venv.sh
# Local History for Visual Studio Code # Local History for Visual Studio Code
.history/ .history/
/reference config/

View File

@ -222,16 +222,3 @@ This should also mean that the sign-up prompts should persist over reboots.
Other developers for Discord Components recommended the use of dynamic call-backs, however these do not persist after reboots so are not suitable for this purpose. Other developers for Discord Components recommended the use of dynamic call-backs, however these do not persist after reboots so are not suitable for this purpose.
Discord will need to make substantial API updates in the future for rolling out the Threads feature. Discord will need to make substantial API updates in the future for rolling out the Threads feature.
The bot will need updating again then. The bot will need updating again then.
## Remote Deployment to docker server
Configure local env to know about the server
- ` docker context create remote --docker "host=tcp://<hostname>:2376,ca=<full path>/ca.pem,cert=<full path>/cert.pem,key=<full path>/key.pem"`
- create a folder on the server to use for the config
- create/amend a docker compose for that env (eg docker-compose-nas)
- put the config in that folder
- deploy using that config `docker compose -f docker-compose-nas.yml up -d`
- hope
- if its a QNAP nas, manually copy the docker compose file to `/share/CACHEDEV1_DATA/VMs/container-station-data/application/geas-bot` because its stupid
-

View File

@ -1,10 +1,7 @@
FROM python:slim FROM python:3.9.6-slim
COPY . /app COPY . /usr/src/app
WORKDIR /app WORKDIR /usr/src/app
RUN apt-get update -y RUN apt-get update -y && apt-get upgrade -y && apt-get install libopus0 -y && \
RUN apt-get upgrade -y pip install --upgrade pip setuptools wheel && pip install -r requirements.txt && \
RUN apt-get install libopus0 -y apt-get autoremove -y
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
RUN apt-get autoremove -y
CMD python3 -u ./bot.py CMD python3 -u ./bot.py

View File

@ -25,13 +25,9 @@ def yaml_dump(data:dict, filepath:str):
yaml.dump(data, file) yaml.dump(data, file)
# Locate or create config file. Read from environment variables to locate file, and if missing or not valid then use default location. # Locate or create config file. Read from environment variables to locate file, and if missing or not valid then use default location.
configFile = './data/config.yml' configFile = os.getenv('CONFIG') if ((os.getenv('CONFIG').endswith('.yml') or os.getenv('CONFIG').endswith('.yaml')) and not os.getenv('CONFIG').endswith('config_blueprint.yml')) else './data/config.yml'
if os.getenv('CONFIG'):
if os.getenv('CONFIG').endswith(('.yml','.yaml')) and not os.getenv('CONFIG').endswith('config_blueprint.yml'):
configFile = os.getenv('CONFIG')
if not os.path.exists(configFile): if not os.path.exists(configFile): yaml_dump({},configFile)
yaml_dump({},configFile)
# Locate or create data file. Same as above. # Locate or create data file. Same as above.
dataFile = os.getenv('DATA') if ((os.getenv('DATA').endswith('.yml') or os.getenv('DATA').endswith('.yaml')) and not os.getenv('DATA').endswith('data_blueprint.yml')) else './data/data.yml' dataFile = os.getenv('DATA') if ((os.getenv('DATA').endswith('.yml') or os.getenv('DATA').endswith('.yaml')) and not os.getenv('DATA').endswith('data_blueprint.yml')) else './data/data.yml'

View File

@ -17,6 +17,15 @@ class PitchListener(commands.Cog, name='Pitch Listener'):
def __init__(self, client): def __init__(self, client):
self.client = client self.client = client
@commands.Cog.listener(name='on_component')
async def _response_defer(self, ctx:ComponentContext):
pitches = yaml_load(pitchesFile)
guildStr = str(ctx.guild.id)
if not pitches.get(guildStr, {}): return # If no pitches for current guild, ignore.
[timeslot] = [*pitches[guildStr]]
if ctx.origin_message.id not in pitches[guildStr][timeslot]['messages'] + [pitches[guildStr][timeslot]['control']]: return # If the context id is not in the pitch menu, ignore
await ctx.defer(hidden = True)
@commands.Cog.listener(name='on_component') @commands.Cog.listener(name='on_component')
async def _pitch_listener(self, ctx:ComponentContext): async def _pitch_listener(self, ctx:ComponentContext):
conf = yaml_load(configFile) conf = yaml_load(configFile)

View File

@ -23,7 +23,8 @@ class RestrictionListener(commands.Cog, name='Membership Restriction Listener'):
lookup = yaml_load(lookupFile) lookup = yaml_load(lookupFile)
if not conf[guildStr].get('restrict',False): return if not conf[guildStr].get('restrict',False): return
if message.author.bot: return if message.author.bot: return
if str(message.channel.category) in categories[guildStr]: return if message.channel.category is None: return
if str(message.channel.category.id) not in categories[guildStr]: return
if (set(message.author.roles) & set([message.guild.get_role(x) for x in conf[guildStr]['roles']['admin']]) or message.author == message.guild.owner): return if (set(message.author.roles) & set([message.guild.get_role(x) for x in conf[guildStr]['roles']['admin']]) or message.author == message.guild.owner): return
if set(message.author.roles) & set([message.guild.get_role(x) for x in conf[guildStr]['membership']]): return if set(message.author.roles) & set([message.guild.get_role(x) for x in conf[guildStr]['membership']]): return
if message.channel.overwrites_for(message.author).manage_channels: return if message.channel.overwrites_for(message.author).manage_channels: return

View File

@ -129,7 +129,7 @@ class Configuration(commands.Cog, name='Configuration Commands'):
if self.client.get_cog('Pitch Command') is None: if self.client.get_cog('Pitch Command') is None:
loadCog(f'./{cogsDir}/slashcommands/secondary/pitch.py') loadCog(f'./{cogsDir}/slashcommands/secondary/pitch.py')
flag = True flag = True
if flag: await self.client.slash.sync_all_commands() if flag: await self.client.slash.sync_all_commands()
@cog_ext.cog_subcommand( @cog_ext.cog_subcommand(
base='config', base='config',

View File

@ -1,9 +0,0 @@
version: '3.5'
services:
geasbot-app:
build: ./app
container_name: geas_bot
volumes:
- /share/Public/geasbot/data:/app/data
restart: unless-stopped

View File

@ -5,5 +5,5 @@ services:
build: ./app build: ./app
container_name: geas_bot container_name: geas_bot
volumes: volumes:
- ./app:/app - ./app:/usr/src/app
restart: unless-stopped restart: unless-stopped