From 23c688f04133bd5c885e481fa9340a2350668ef8 Mon Sep 17 00:00:00 2001 From: Thierry Carrez Date: Tue, 13 Feb 2018 16:49:55 +0100 Subject: [PATCH] Allow everyone to issue track moderator commands By default, allow anyone in channel to issue track moderation commands (as that greatly simplifies administration). Add two admin commands to allow toggling that behavior on and off. Change-Id: I5dc95a1ea14b49c1882bd715b8fbdc3344867b64 --- README.rst | 11 ++++++++++- ptgbot/bot.py | 9 +++++++-- ptgbot/db.py | 13 ++++++++++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index d42583c..1977189 100644 --- a/README.rst +++ b/README.rst @@ -16,7 +16,10 @@ with several sections of information: Track moderators commands ========================= -You have to have voice in the channel (+v) to send commands to the ptgbot. +By default the bot allows anyone in the channel to issue track moderation +commands. However note that it is possible for admins to restrict access +to people who have voice in the channel (+v). + Commands follow the following format:: #TRACKNAME COMMAND [PARAMETERS] @@ -133,6 +136,12 @@ You have to be a channel operator (+o) to use admin commands. ~reload Resets the database entirely (reloads from configuration) +~requirevoice + Requires that users are voiced (+v) to issue track moderation commands + +~alloweveryone + Allows everyone in the channel to issue track moderation commands + Local testing ============= diff --git a/ptgbot/bot.py b/ptgbot/bot.py index 5f0d080..24f6921 100644 --- a/ptgbot/bot.py +++ b/ptgbot/bot.py @@ -110,8 +110,9 @@ class PTGBot(irc.bot.SingleServerIRCBot): chan = e.target if msg.startswith('#'): - if not (self.channels[chan].is_voiced(nick) or - self.channels[chan].is_oper(nick)): + if (self.data.is_voice_required() and not + (self.channels[chan].is_voiced(nick) or + self.channels[chan].is_oper(nick))): self.send(chan, "%s: Need voice to issue commands" % (nick,)) return @@ -171,6 +172,10 @@ class PTGBot(irc.bot.SingleServerIRCBot): self.data.unbook(room, timeslot) elif command == 'newday': self.data.new_day_cleanup() + elif command == 'requirevoice': + self.data.require_voice() + elif command == 'alloweveryone': + self.data.allow_everyone() elif command == 'list': self.send_track_list(chan) elif command in ('clean', 'add', 'del'): diff --git a/ptgbot/db.py b/ptgbot/db.py index 5ad3a74..a1bc47b 100644 --- a/ptgbot/db.py +++ b/ptgbot/db.py @@ -26,7 +26,7 @@ import random class PTGDataBase(): BASE = {'tracks': [], 'slots': {}, 'now': {}, 'next': {}, 'colors': {}, - 'location': {}, 'scheduled': {}, 'additional': {}} + 'location': {}, 'scheduled': {}, 'additional': {}, 'voice': 0} def __init__(self, config): self.filename = config['db_filename'] @@ -167,6 +167,17 @@ class PTGDataBase(): self.data['additional'][room][timeslot] = "" self.save() + def is_voice_required(self): + return self.data['voice'] == 1 + + def require_voice(self): + self.data['voice'] = 1 + self.save() + + def allow_everyone(self): + self.data['voice'] = 0 + self.save() + def new_day_cleanup(self): self.data['now'] = {} self.data['next'] = {}