mirror of
https://github.com/SpiceBot/SpiceBot.git
synced 2026-11-10 21:50:59 -05:00
Update KICK, and prepare for another overhault of the event system
This commit is contained in:
parent
0269ad567d
commit
805e075e6c
@ -16,10 +16,20 @@ class BotEvents(object):
|
||||
Events will be assigned a 4-digit number above 1000.
|
||||
|
||||
This allows you to do, ``@module.event(botevents.BOT_WELCOME)````
|
||||
|
||||
Triggers handled by this module will be processed immediately.
|
||||
Others will be placed into a queue.
|
||||
|
||||
Triggers will be logged by ID and content
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.SpiceBot_Events = {"assigned_IDs": [1000]}
|
||||
self.SpiceBot_Events = {
|
||||
"assigned_IDs": [1000],
|
||||
"triggers_recieved": {},
|
||||
"trigger_queue": [],
|
||||
"startup_required": []
|
||||
}
|
||||
|
||||
def __getattr__(self, name):
|
||||
''' will only get called for undefined attributes '''
|
||||
@ -28,6 +38,44 @@ class BotEvents(object):
|
||||
setattr(self, name, str(eventnumber))
|
||||
return str(eventnumber)
|
||||
|
||||
def trigger(self, number, message="SpiceBot_Events"):
|
||||
number = str(number)
|
||||
if number in [self.BOT_WELCOME, self.BOT_READY, self.BOT_CONNECTED, self.BOT_LOADED]:
|
||||
pretrigger = PreTrigger(
|
||||
sopel.bot.nick,
|
||||
":SpiceBot_Events " + number + " " + str(sopel.bot.nick) + " :" + message
|
||||
)
|
||||
sopel.bot.dispatch(pretrigger)
|
||||
else:
|
||||
pretriggerdict = {"number": number, "message": message}
|
||||
self.SpiceBot_Events["trigger_queue"].append(pretriggerdict)
|
||||
|
||||
def recieved(self, trigger):
|
||||
eventnumber = str(trigger.event)
|
||||
message_payload = trigger.args[1]
|
||||
if eventnumber not in self.SpiceBot_Events["triggers_recieved"]:
|
||||
self.SpiceBot_Events["triggers_recieved"][eventnumber] = []
|
||||
self.SpiceBot_Events["assigned_IDs"]["triggers_recieved"][eventnumber].append(message_payload)
|
||||
|
||||
def check(self, checklist):
|
||||
if not isinstance(checklist, list):
|
||||
checklist = [str(checklist)]
|
||||
for number in checklist:
|
||||
if str(number) not in self.SpiceBot_Events["triggers_recieved"].keys():
|
||||
return False
|
||||
return True
|
||||
|
||||
def startup_add(self, startlist):
|
||||
if not isinstance(startlist, list):
|
||||
startlist = [str(startlist)]
|
||||
self.SpiceBot_Events["startup_required"].extend(startlist)
|
||||
|
||||
def startup_check(self):
|
||||
for number in self.SpiceBot_Events["startup_required"]:
|
||||
if str(number) not in self.SpiceBot_Events["triggers_recieved"].keys():
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
botevents = BotEvents()
|
||||
|
||||
@ -41,6 +89,12 @@ def register_trigger(number, message):
|
||||
bot, trigger = args[0:2]
|
||||
return function(*args, **kwargs)
|
||||
return _nop
|
||||
|
||||
ideas:
|
||||
|
||||
while not bot_events_check(bot, [botevents.BOT_LOADED, botevents.BOT_COMMANDSQUERY]):
|
||||
pass
|
||||
|
||||
"""
|
||||
|
||||
|
||||
|
||||
@ -12,7 +12,6 @@ from __future__ import unicode_literals, absolute_import, division, print_functi
|
||||
import sopel.bot
|
||||
from sopel import tools, module
|
||||
from sopel.tools import Identifier
|
||||
from sopel.module import HALFOP
|
||||
from sopel.config.types import StaticSection, ValidatedAttribute
|
||||
|
||||
from sopel_modules.SpiceBot_SBTools import bot_logging
|
||||
@ -28,8 +27,8 @@ __version__ = '0.1.2'
|
||||
|
||||
|
||||
def configure(config):
|
||||
config.define_section("MAXTARGCONFIG_KICK", MAXTARGCONFIG_KICK, validate=False)
|
||||
config.MAXTARGCONFIG_KICK.configure_setting('kick', 'MAXTARG limit for KICK')
|
||||
config.define_section("SpiceBot_Kick", SpiceBot_Kick, validate=False)
|
||||
config.SpiceBot_Kick.configure_setting('kick', 'MAXTARG limit for KICK')
|
||||
|
||||
|
||||
def setup(bot):
|
||||
@ -41,7 +40,7 @@ def setup(bot):
|
||||
|
||||
# verify config settings for server
|
||||
bot_logging(bot, 'SpiceBot_Kick', "Checking for config settings")
|
||||
bot.config.define_section("MAXTARGCONFIG_KICK", MAXTARGCONFIG_KICK, validate=False)
|
||||
bot.config.define_section("SpiceBot_Kick", SpiceBot_Kick, validate=False)
|
||||
|
||||
|
||||
@module.event('005')
|
||||
@ -63,10 +62,10 @@ def parse_event_005(bot, trigger):
|
||||
except IndexError:
|
||||
value = None
|
||||
if value:
|
||||
bot.config.MAXTARGCONFIG_KICK.kick = int(value)
|
||||
bot.config.SpiceBot_Kick.kick = int(value)
|
||||
|
||||
|
||||
class MAXTARGCONFIG_KICK(StaticSection):
|
||||
class SpiceBot_Kick(StaticSection):
|
||||
kick = ValidatedAttribute('kick', default=1)
|
||||
|
||||
|
||||
@ -80,8 +79,7 @@ class SopelKICK:
|
||||
The bot must be a channel operator in specified channel for this to work.
|
||||
.. versionadded:: 7.0
|
||||
"""
|
||||
if self.channels[channel].privileges[self.nick] < HALFOP:
|
||||
self.write(['KICK', channel, nick], text)
|
||||
self.write(['KICK', channel, nick], text)
|
||||
|
||||
|
||||
class SopelWrapperKICK(object):
|
||||
@ -89,9 +87,9 @@ class SopelWrapperKICK(object):
|
||||
def kick(self, nick, channel=None, message=None):
|
||||
if channel is None:
|
||||
if self._trigger.is_privmsg:
|
||||
return
|
||||
raise RuntimeError('Error: KICK requires a channel.')
|
||||
else:
|
||||
channel = self._trigger.sender
|
||||
if nick is None:
|
||||
return
|
||||
raise RuntimeError('Error: KICK requires a nick.')
|
||||
self._bot.kick(nick, channel, message)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user