Compare commits
No commits in common. "dd3ebcaa35368303e7a7a6fe2bc3c8721e588533" and "bec9ff4d76468c46ca5afaff2c0c119eff61a3c8" have entirely different histories.
dd3ebcaa35
...
bec9ff4d76
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -4,4 +4,3 @@ resources/*
|
||||||
!resources/.gitkeep
|
!resources/.gitkeep
|
||||||
venv/
|
venv/
|
||||||
.vim/
|
.vim/
|
||||||
__pycache__/
|
|
||||||
|
|
|
@ -46,11 +46,6 @@
|
||||||
"reply": "{target} captured {num} things : {things}",
|
"reply": "{target} captured {num} things : {things}",
|
||||||
"empty_reply": "{target} did not capture anything yet!"
|
"empty_reply": "{target} did not capture anything yet!"
|
||||||
},
|
},
|
||||||
"capturegive": {
|
|
||||||
"commands": ["give"],
|
|
||||||
"content_regex": "my (?P<thing>\\S+) to (?P<person>\\S+)",
|
|
||||||
"no_such_thing_reply": "You don't have such {thing}."
|
|
||||||
},
|
|
||||||
"common": {
|
"common": {
|
||||||
"command_suffix": "please",
|
"command_suffix": "please",
|
||||||
"handling_conditions": {
|
"handling_conditions": {
|
||||||
|
|
|
@ -179,7 +179,6 @@ class Bot(irc.client.SimpleIRCClient, Logger):
|
||||||
def handle_sigterm(self, *args):
|
def handle_sigterm(self, *args):
|
||||||
"""Handle SIGTERM (keyboard interrupt, systemd stop, etc)."""
|
"""Handle SIGTERM (keyboard interrupt, systemd stop, etc)."""
|
||||||
self.cleanup()
|
self.cleanup()
|
||||||
exit("Exiting after received SIGTERM.")
|
|
||||||
|
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
"""Save the storage file and close the connection. Run only once."""
|
"""Save the storage file and close the connection. Run only once."""
|
||||||
|
|
|
@ -105,13 +105,12 @@ class Plugin:
|
||||||
ns = self.name
|
ns = self.name
|
||||||
return self.bot.storage.get(ns, {}).get(key, default)
|
return self.bot.storage.get(ns, {}).get(key, default)
|
||||||
|
|
||||||
def set_storage_value(self, key, value, ns=None):
|
def set_storage_value(self, key, value):
|
||||||
"""Set a value in the plugin persistent storage."""
|
"""Set a value in the plugin persistent storage."""
|
||||||
name = ns or self.name
|
if self.name not in self.bot.storage:
|
||||||
if name not in self.bot.storage:
|
self.bot.storage[self.name] = {key: value}
|
||||||
self.bot.storage[name] = {key: value}
|
|
||||||
else:
|
else:
|
||||||
self.bot.storage[name][key] = value
|
self.bot.storage[self.name][key] = value
|
||||||
|
|
||||||
def append_storage_list_value(self, key, value):
|
def append_storage_list_value(self, key, value):
|
||||||
"""Append a value to a list in the plugin persistent storage."""
|
"""Append a value to a list in the plugin persistent storage."""
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
import re
|
|
||||||
import time
|
|
||||||
|
|
||||||
from edmond.plugin import Plugin
|
|
||||||
|
|
||||||
|
|
||||||
class CaptureGivePlugin(Plugin):
|
|
||||||
|
|
||||||
REQUIRED_CONFIGS = ["commands", "content_regex", "no_such_thing_reply"]
|
|
||||||
|
|
||||||
def __init__(self, bot):
|
|
||||||
super().__init__(bot)
|
|
||||||
self._content_re = None
|
|
||||||
|
|
||||||
@property
|
|
||||||
def content_re(self):
|
|
||||||
if self._content_re is None:
|
|
||||||
self._content_re = re.compile(self.config["content_regex"])
|
|
||||||
return self._content_re
|
|
||||||
|
|
||||||
def on_welcome(self, _):
|
|
||||||
if not self.bot.get_plugin("capture"):
|
|
||||||
self.bot.log_w("Capture plugin is not available.")
|
|
||||||
self.is_ready = False
|
|
||||||
|
|
||||||
def on_pubmsg(self, event):
|
|
||||||
if not self.should_handle_command(event.arguments[0]):
|
|
||||||
return False
|
|
||||||
|
|
||||||
# "give" command.
|
|
||||||
if self.command.ident == self.config["commands"][0]:
|
|
||||||
content = self.command.raw[len(self.command.match):].strip()
|
|
||||||
match = self.content_re.match(content)
|
|
||||||
if not match:
|
|
||||||
return False
|
|
||||||
groups = match.groupdict()
|
|
||||||
if any(k not in groups for k in ("thing", "person")):
|
|
||||||
return False
|
|
||||||
thing = groups["thing"]
|
|
||||||
person = groups["person"]
|
|
||||||
|
|
||||||
# Check the sender has the thing they attempt to give.
|
|
||||||
collections = self.get_storage_value(
|
|
||||||
"collections",
|
|
||||||
default={},
|
|
||||||
ns="capture"
|
|
||||||
)
|
|
||||||
source = event.source.nick
|
|
||||||
source_collection = collections.get(source, [])
|
|
||||||
if thing not in source_collection:
|
|
||||||
reply = self.config["no_such_thing_reply"].format(thing=thing)
|
|
||||||
self.bot.say(event.target, reply)
|
|
||||||
return True
|
|
||||||
|
|
||||||
source_collection.remove(thing)
|
|
||||||
collections[source] = source_collection
|
|
||||||
|
|
||||||
target_collection = collections.get(person, [])
|
|
||||||
target_collection.append(thing)
|
|
||||||
collections[person] = target_collection
|
|
||||||
|
|
||||||
self.set_storage_value("collections", collections, ns="capture")
|
|
||||||
|
|
||||||
dance_text_1 = f"[{source}] {thing}<(OvO<) [{person}]"
|
|
||||||
self.bot.say(event.target, dance_text_1)
|
|
||||||
time.sleep(1)
|
|
||||||
dance_text_2 = f"[{source}] (>OvO)>{thing} [{person}]"
|
|
||||||
self.bot.say(event.target, dance_text_2)
|
|
||||||
return True
|
|
|
@ -33,8 +33,6 @@ class YoutubeParserPlugin(Plugin):
|
||||||
self.is_ready = False
|
self.is_ready = False
|
||||||
|
|
||||||
def on_pubmsg(self, event):
|
def on_pubmsg(self, event):
|
||||||
if not self.respects_handling_conditions():
|
|
||||||
return False
|
|
||||||
words = event.arguments[0].split()
|
words = event.arguments[0].split()
|
||||||
for word in words:
|
for word in words:
|
||||||
match = self.VIDEO_URL_RE.match(word)
|
match = self.VIDEO_URL_RE.match(word)
|
||||||
|
|
Loading…
Reference in a new issue