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'] = {}