diff options
Diffstat (limited to 'plugins/marquee.py')
-rw-r--r-- | plugins/marquee.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/plugins/marquee.py b/plugins/marquee.py new file mode 100644 index 00000000..6fcf4631 --- /dev/null +++ b/plugins/marquee.py @@ -0,0 +1,70 @@ +""" +Marquee plugin: replicate the html <marquee/> tag with message corrections. + +Usage of this plugin is not recommended. + +Commands +-------- + +.. glossary:: + + /marquee <text> + Send the following text with <marquee/> behavior + +Configuration +------------- + +.. glossary:: + :sorted: + + refresh + **Default:** ``1`` + + Interval between each correction (the closest to 0 is the fastest) + + total_duration + **Default:** ``30`` + + Total duration of the animation. + + padding + **Default:** ``20`` + + Padding to use to move the text. + + +""" +from plugin import BasePlugin +import tabs +from decorators import command_args_parser + +def move(text, step, spacing): + new_text = text + (" " * spacing) + return new_text[-(step % len(new_text)):] + new_text[:-(step % len(new_text))] + +class Plugin(BasePlugin): + default_config = {"marquee": {"refresh": 1, "total_duration": 30, "padding": 20}} + + def init(self): + self.add_tab_command(tabs.MucTab, 'marquee', self.command_marquee, 'Replicate the <marquee/> behavior in a message') + + @command_args_parser.raw + def command_marquee(self, args): + tab = self.api.current_tab() + tab.command_say(args) + msg_id = tab.last_sent_message["id"] + jid = tab.name + + self.api.add_timed_event(self.api.create_delayed_event(self.config.get("refresh"), self.delayed_event, jid, args, msg_id, 0)) + + def delayed_event(self, jid, body, msg_id, duration): + if duration >= self.config.get("total_duration"): + return + message = self.core.xmpp.make_message(jid) + message["type"] = "groupchat" + message["body"] = move(body, duration, self.config.get("padding")) + message["replace"]["id"] = msg_id + message.send() + self.api.add_timed_event(self.api.create_delayed_event(self.config.get("refresh"), self.delayed_event, jid, body, message["id"], duration + 1)) + + |