Create functions for is_voiced and is_oper checks

In order to be able to easily mock voice and oper checks, create
specific functions that implement those checks.

Change-Id: I6250c0d181085ff39d6ff0dae95c700dbeb931a3
This commit is contained in:
Thierry Carrez 2020-11-25 16:01:28 +01:00
parent df17b77f7e
commit 6bf2598db6

View File

@ -264,6 +264,13 @@ class PTGBot(SASL, SSL, irc.bot.SingleServerIRCBot):
"Cancelled subscription %s" % existing_re
)
def is_chanop(self, nick, chan):
return self.channels[chan].is_oper(nick)
def is_voiced(self, nick, chan):
return (self.channels[chan].is_voiced(nick) or
self.channels[chan].is_oper(nick))
@make_safe
def on_pubmsg(self, c, e):
if not self.identify_msg_cap:
@ -295,9 +302,8 @@ class PTGBot(SASL, SSL, irc.bot.SingleServerIRCBot):
self.unsubscribe(chan, nick)
return
if (self.data.is_voice_required() and not
(self.channels[chan].is_voiced(nick) or
self.channels[chan].is_oper(nick))):
if (self.data.is_voice_required() and
not self.is_voiced(nick, chan)):
self.send(chan, "%s: Need voice to issue commands" % (nick,))
return
@ -367,7 +373,7 @@ class PTGBot(SASL, SSL, irc.bot.SingleServerIRCBot):
"scheduled today." % (nick, track))
if msg.startswith('~'):
if not self.channels[chan].is_oper(nick):
if not self.is_chanop(nick, chan):
self.send(chan, "%s: Need op for admin commands" % (nick,))
return
words = msg.split()