import socket from edmond.plugin import Plugin class ShrlokPlugin(Plugin): """Use an available shrlok server to allow sharing longer stuff. This plugin does not do anything on its own, but can be used from other plugins to share longer texts through a Web portal. """ def __init__(self, bot): super().__init__(bot) self.socket = "" self.file_root = "" self.url_root = "" def on_welcome(self, _): if all( conf in self.config for conf in ("socket_path", "file_root", "url_root") ): self.socket = self.config["socket_path"] self.file_root = self.config["file_root"] self.url_root = self.config["url_root"] self.bot.log_d(f"shrlok socket path '{self.socket}'") else: self.bot.log_d("No socket path specified, shrlok plugin disabled.") self.is_ready = False def post_text(self, content): try: with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock: sock.connect(self.socket) data = b'{"type":"txt"}\0' + content.encode() sock.sendall(str(len(data)).encode() + b"\0" + data) response = sock.recv(4096) except OSError as exc: self.bot.log_e(f"Can't post text file: {exc}") return None url = response.decode().replace(self.file_root, self.url_root, 1) return url