Compare commits

..

2 commits

Author SHA1 Message Date
dece 0d49fb1457 beers: offer a beer to someone in particular 2022-06-08 17:18:51 +02:00
dece b6929c9453 plugins: stop using match as name
In Python 3.10 match will become a soft keyword. The program would still
work but syntax highlighting is getting weird.
2022-06-08 17:12:33 +02:00
6 changed files with 33 additions and 25 deletions

View file

@ -25,7 +25,8 @@
"beers": {
"commands": ["beer"],
"beers": ["Paix-Dieu"],
"opening_text": "/me cracks open a {beer} for {target}"
"opening_text": "/me cracks open a {beer} for {target}",
"target_word": "for"
},
"caretaker": {
"warm_welcome": ["Hi {target}!"],

View file

@ -183,8 +183,8 @@ class Plugin:
return True
return False
def __save_question(self, question, match, preamble):
content = question[len(match):].strip()
def __save_question(self, question, matched, preamble):
content = question[len(matched):].strip()
content = content.rstrip("?").rstrip()
question = Question(preamble, content)
self.question = question
@ -228,23 +228,23 @@ class Plugin:
# If no_content is False (default), simply compare the parsed
# identifier with available identifiers.
if no_content:
match = lambda pc, ai: (
matches = lambda pc, ai: (
pc.raw == ai or pc.raw.startswith(ai + " ")
)
else:
match = lambda pc, ai: pc.ident == ai
matches = lambda pc, ai: pc.ident == ai
# First case: the command identifier has been used.
if match(parsed_command, ident):
if matches(parsed_command, ident):
parsed_command.ident = ident
parsed_command.match = ident
parsed_command.matched = ident
self.__save_command(parsed_command)
return True
# Second case: an alias of the identifier has been used.
ident_aliases = aliases.get(ident, [])
for alias in ident_aliases:
if match(parsed_command, alias):
if matches(parsed_command, alias):
parsed_command.ident = ident
parsed_command.match = alias
parsed_command.matched = alias
self.__save_command(parsed_command)
return True
return False
@ -313,4 +313,4 @@ class Command:
# Raw command content (minus name and suffix), always set.
raw: str
# Identifier matched, possibly an alias. Set only when matched.
match: str = ""
matched: str = ""

View file

@ -5,7 +5,7 @@ from edmond.plugin import Plugin
class BeersPlugin(Plugin):
REQUIRED_CONFIGS = ["commands", "beers", "opening_text"]
REQUIRED_CONFIGS = ["commands", "beers", "opening_text", "target_word"]
def __init__(self, bot):
super().__init__(bot)
@ -13,10 +13,17 @@ class BeersPlugin(Plugin):
def on_pubmsg(self, event):
if not self.should_handle_command(event.arguments[0]):
return False
target = event.source.nick
if self.command.content:
words = self.command.content.split(maxsplit=1)
if len(words) == 2 and words[0] == self.config["target_word"]:
target = words[1]
beer = random.choice(self.config["beers"])
opening_text = self.config["opening_text"].format(
beer=beer,
target=event.source.nick
target=target
)
self.bot.say(event.target, opening_text)
return True

View file

@ -29,11 +29,11 @@ class CaptureGivePlugin(Plugin):
# "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:
content = self.command.raw[len(self.command.matched):].strip()
matched = self.content_re.matched(content)
if not matched:
return False
groups = match.groupdict()
groups = matched.groupdict()
if any(k not in groups for k in ("thing", "person")):
return False
thing = groups["thing"]

View file

@ -32,11 +32,11 @@ class NotesPlugin(Plugin):
# "note down" 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:
content = self.command.raw[len(self.command.matched):].strip()
matched = self.content_re.match(content)
if not matched:
return False
groups = match.groupdict()
groups = matched.groupdict()
if any(k not in groups for k in ("target", "note")):
return False
target = groups["target"]

View file

@ -37,13 +37,13 @@ class YoutubeParserPlugin(Plugin):
return False
words = event.arguments[0].split()
for word in words:
match = self.VIDEO_URL_RE.match(word)
if match:
return self.handle_match(match, event.target)
matched = self.VIDEO_URL_RE.match(word)
if matched:
return self.handle_match(matched, event.target)
return False
def handle_match(self, match, target):
groupdict = match.groupdict()
def handle_match(self, matched, target):
groupdict = matched.groupdict()
code = groupdict.get("code1") or groupdict.get("code2")
if not code:
return False