Add a marquee plugin
Using the power of last message corrections
This commit is contained in:
parent
11c69343a4
commit
e7c780d5a0
1 changed files with 70 additions and 0 deletions
70
plugins/marquee.py
Normal file
70
plugins/marquee.py
Normal file
|
@ -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))
|
||||
|
||||
|
Loading…
Reference in a new issue