From 8a75ddbfedddd74f4b750d09fd6a67596f956001 Mon Sep 17 00:00:00 2001 From: www Date: Sun, 29 Sep 2024 21:29:43 +0000 Subject: [PATCH 1/1] Mirrored from chen.git git-svn-id: https://svn.chaotic.ninja/svn/chen-yakumo.izuru@1 45bf2fb3-30f2-7a47-aa86-e6f8f3ae9456 --- branches/master/.gitignore | 1 + branches/master/COPYING | 4 + branches/master/Makefile | 10 + branches/master/README | 20 ++ branches/master/avatar.png | Bin 0 -> 72424 bytes branches/master/config.ini.default | 5 + branches/master/main.py | 274 +++++++++++++++++++ branches/master/requirements.txt | 6 + branches/master/run.sh | 4 + branches/master/services/chen.service | 19 ++ branches/master/services/chen.yml | 6 + branches/origin-master/.gitignore | 1 + branches/origin-master/COPYING | 4 + branches/origin-master/Makefile | 10 + branches/origin-master/README | 20 ++ branches/origin-master/avatar.png | Bin 0 -> 72424 bytes branches/origin-master/config.ini.default | 5 + branches/origin-master/main.py | 274 +++++++++++++++++++ branches/origin-master/requirements.txt | 6 + branches/origin-master/run.sh | 4 + branches/origin-master/services/chen.service | 19 ++ branches/origin-master/services/chen.yml | 6 + branches/origin/.gitignore | 1 + branches/origin/COPYING | 4 + branches/origin/Makefile | 10 + branches/origin/README | 20 ++ branches/origin/avatar.png | Bin 0 -> 72424 bytes branches/origin/config.ini.default | 5 + branches/origin/main.py | 274 +++++++++++++++++++ branches/origin/requirements.txt | 6 + branches/origin/run.sh | 4 + branches/origin/services/chen.service | 19 ++ branches/origin/services/chen.yml | 6 + trunk/.gitignore | 1 + trunk/COPYING | 4 + trunk/Makefile | 10 + trunk/README | 20 ++ trunk/avatar.png | Bin 0 -> 72424 bytes trunk/config.ini.default | 5 + trunk/main.py | 274 +++++++++++++++++++ trunk/requirements.txt | 6 + trunk/run.sh | 4 + trunk/services/chen.service | 19 ++ trunk/services/chen.yml | 6 + 44 files changed, 1396 insertions(+) create mode 100644 branches/master/.gitignore create mode 100644 branches/master/COPYING create mode 100644 branches/master/Makefile create mode 100644 branches/master/README create mode 100644 branches/master/avatar.png create mode 100644 branches/master/config.ini.default create mode 100644 branches/master/main.py create mode 100644 branches/master/requirements.txt create mode 100755 branches/master/run.sh create mode 100644 branches/master/services/chen.service create mode 100644 branches/master/services/chen.yml create mode 100644 branches/origin-master/.gitignore create mode 100644 branches/origin-master/COPYING create mode 100644 branches/origin-master/Makefile create mode 100644 branches/origin-master/README create mode 100644 branches/origin-master/avatar.png create mode 100644 branches/origin-master/config.ini.default create mode 100644 branches/origin-master/main.py create mode 100644 branches/origin-master/requirements.txt create mode 100755 branches/origin-master/run.sh create mode 100644 branches/origin-master/services/chen.service create mode 100644 branches/origin-master/services/chen.yml create mode 100644 branches/origin/.gitignore create mode 100644 branches/origin/COPYING create mode 100644 branches/origin/Makefile create mode 100644 branches/origin/README create mode 100644 branches/origin/avatar.png create mode 100644 branches/origin/config.ini.default create mode 100644 branches/origin/main.py create mode 100644 branches/origin/requirements.txt create mode 100755 branches/origin/run.sh create mode 100644 branches/origin/services/chen.service create mode 100644 branches/origin/services/chen.yml create mode 100644 trunk/.gitignore create mode 100644 trunk/COPYING create mode 100644 trunk/Makefile create mode 100644 trunk/README create mode 100644 trunk/avatar.png create mode 100644 trunk/config.ini.default create mode 100644 trunk/main.py create mode 100644 trunk/requirements.txt create mode 100755 trunk/run.sh create mode 100644 trunk/services/chen.service create mode 100644 trunk/services/chen.yml diff --git a/branches/master/.gitignore b/branches/master/.gitignore new file mode 100644 index 0000000..2fa7ce7 --- /dev/null +++ b/branches/master/.gitignore @@ -0,0 +1 @@ +config.ini diff --git a/branches/master/COPYING b/branches/master/COPYING new file mode 100644 index 0000000..5aabf52 --- /dev/null +++ b/branches/master/COPYING @@ -0,0 +1,4 @@ +Freedom License v1 (2023年05月11日) + +全く無限的自由です。 +It's infinite freedom. diff --git a/branches/master/Makefile b/branches/master/Makefile new file mode 100644 index 0000000..870c59d --- /dev/null +++ b/branches/master/Makefile @@ -0,0 +1,10 @@ +# $TheSupernovaDuo$ +all: + @echo "Commands available" + @echo "==================" + @echo "deps -- fetch and install dependencies" + @echo "format -- format code using python-black" +deps: + pip install --user -r requirements.txt +format: + black main.py diff --git a/branches/master/README b/branches/master/README new file mode 100644 index 0000000..35474bd --- /dev/null +++ b/branches/master/README @@ -0,0 +1,20 @@ +chen +==== + +XMPP bot to preview links and file contents. Shikigami of the Shikigami of the Gap Youkai +Based on Angel[1], without the sed(1) and YT redirect features. + +Requirements +------------ + +* Python >= 3.7 + +Run +--- + +* pip3 install --user -r requirements.txt +* $EDITOR config.ini.default (save as config.ini) +* python3 main.py + + +[1]: https://wiki.kalli.st/Angel diff --git a/branches/master/avatar.png b/branches/master/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e7231449608708c705eb5d07fe010840edf8e0 GIT binary patch literal 72424 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%0Dr%KXD!4W3rvu_nSNTmWo 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 literal 0 HcmV?d00001 diff --git a/branches/master/config.ini.default b/branches/master/config.ini.default new file mode 100644 index 0000000..c8348a8 --- /dev/null +++ b/branches/master/config.ini.default @@ -0,0 +1,5 @@ +[chen] +jid = chen@example.com +password = b0TPA55W0rD +nick = Chen +autojoin = room1@muc.example.com room2@muc.example.com room3@muc.example.com diff --git a/branches/master/main.py b/branches/master/main.py new file mode 100644 index 0000000..51acbaa --- /dev/null +++ b/branches/master/main.py @@ -0,0 +1,274 @@ +import requests +import bs4 +import random +import configparser +import re +import io +import os +import mimetypes +import asyncio +from collections import defaultdict +from slixmpp import ClientXMPP +from urllib.parse import urlparse, parse_qs, urlunparse +from pantomime import normalize_mimetype +import ecgi + +parser = "html.parser" +user_agent = "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0" +accept_lang = "en-US" +data_limit = 786400000 + +headers = { + "user-agent": user_agent, + "Accept-Language": accept_lang, + "Cache-Control": "no-cache", +} +block_list = ( + "localhost", + "127.0.0.1", + "0.0.0.0", + "youtu.be", + "www.youtube.com", + "youtube.com", + "m.youtube.com", + "music.youtube.com", +) +req_list = ( + "http://", + "https://", +) +html_files = ( + "text/html", + "application/xhtml+xml", +) + + +class Lifo(list): + """ + Limited size LIFO array to store messages and urls + """ + + def __init__(self, size): + super().__init__() + self.size = size + + def add(self, item): + self.insert(0, item) + if len(self) > self.size: + self.pop() + + +# Cheeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeen +class ChenBot(ClientXMPP): + commands = {} + muc_commands = {} + + messages = defaultdict( + lambda: { + "messages": Lifo(100), + "links": Lifo(10), + "previews": Lifo(10), + } + ) + + def get_urls(self, msg): + str_list = msg["body"].strip().split() + urls = [u for u in str_list if any(r in u for r in req_list)] + return urls + + async def parse_uri(self, uri, sender, mtype): + """Parse a URI and send the result to the sender.""" + netloc = uri.netloc + if netloc.split(":")[0] in block_list: + return + else: + await self.process_link(uri, sender, mtype) + + async def process_link(self, uri, sender, mtype): + """Process a link and send the result to the sender.""" + url = urlunparse(uri) + r = requests.get(url, stream=True, headers=headers, timeout=5) + if not r.ok: + return + ftype = normalize_mimetype(r.headers.get("content-type")) + if ftype in html_files: + data = "" + for i in r.iter_content(chunk_size=1024, decode_unicode=False): + data += i.decode("utf-8", errors="ignore") + if len(data) > data_limit or "" in data.lower(): + break + soup = bs4.BeautifulSoup(data, parser) + if title := soup.find("title"): + output = title.text.strip() + if output: + output = f"*{output}*" if ("\n" not in output) else output + if output in self.messages[sender]["previews"]: + return + + self.messages[sender]["previews"].add(output) + if r.history: + self.send_message(mto=sender, mbody=r.url, mtype=mtype) + self.send_message(mto=sender, mbody=output, mtype=mtype) + + else: + try: + length = 0 + outfile = io.BytesIO() + for chunk in r.iter_content( + chunk_size=512, + decode_unicode=False, + ): + length += 512 + if length >= data_limit: + return + outfile.write(chunk) + + content_disposition = r.headers.get("content-disposition") + filename = None + if content_disposition: + _, params = ecgi.parse_header(content_disposition) + filename = params.get("filename") + else: + filename = os.path.basename(uri.path) + + ext = os.path.splitext(filename)[1] if filename else ".txt" + fname = filename if filename else f"file{ext}" + await self.embed_file(url, sender, mtype, ftype, fname, outfile) + except Exception as e: + print(e) + + async def embed_file(self, url, sender, mtype, ftype, fname, outfile): + """Embed a file and send the result to the sender.""" + furl = await self.plugin["xep_0363"].upload_file( + fname, content_type=ftype, input_file=outfile + ) + message = self.make_message(sender) + message["body"] = furl + message["type"] = mtype + message["oob"]["url"] = furl + message.send() + + async def parse_urls(self, msg, urls, sender, mtype): + body = msg["body"].lower() + if "nsfl" in body: + return + if "nsfw" in body: + return + if "#nospoil" in body: + return + for u in urls: + if u in self.messages[sender]["links"]: + continue + else: + self.messages[sender]["links"].add(u) + + uri = urlparse(u) + await self.parse_uri(uri, sender, mtype) + + def __init__(self, jid, password, nick, autojoin=None): + ClientXMPP.__init__(self, jid, password) + self.jid = jid + self.nick = nick or [] + self.autojoin = autojoin or [] + self.register_plugin("xep_0030") + self.register_plugin("xep_0060") + self.register_plugin("xep_0054") + self.register_plugin("xep_0045") + self.register_plugin("xep_0066") + self.register_plugin("xep_0084") + self.register_plugin("xep_0153") + self.register_plugin("xep_0363") + + self.add_event_handler("session_start", self.session_start) + self.add_event_handler("message", self.message) + self.add_event_handler("groupchat_message", self.muc_message) + self.add_event_handler("disconnected", lambda _: self.connect()) + + async def session_start(self, event): + """Start the bot.""" + self.send_presence() + await self.get_roster() + await self.update_info() + for channel in self.autojoin: + try: + self.plugin["xep_0045"].join_muc(channel, self.nick) + except Exception as e: + print(e) + + async def update_info(self): + """Update the bot info.""" + with open("avatar.png", "rb") as avatar_file: + avatar = avatar_file.read() + + avatar_type = "image/png" + avatar_id = self.plugin["xep_0084"].generate_id(avatar) + avatar_bytes = len(avatar) + + asyncio.gather(self.plugin["xep_0084"].publish_avatar(avatar)) + asyncio.gather( + self.plugin["xep_0153"].set_avatar( + avatar=avatar, + mtype=avatar_type, + ) + ) + + info = { + "id": avatar_id, + "type": avatar_type, + "bytes": avatar_bytes, + } + + asyncio.gather(self.plugin["xep_0084"].publish_avatar_metadata([info])) + + vcard = self.plugin["xep_0054"].make_vcard() + vcard["URL"] = "https://git.chaotic.ninja/yakumo.izuru/chen" + vcard["DESC"] = "Shikigami of the Shikigami of the Gap Youkai" + vcard["NICKNAME"] = "Chen" + vcard["FN"] = "Chen" + asyncio.gather(self.plugin["xep_0054"].publish_vcard(vcard)) + + async def message(self, msg): + """Process a message.""" + if msg["type"] in ("chat", "normal"): + mtype = "chat" + sender = msg["from"].bare + message = msg["body"] + + ctx = message.strip().split() + + try: + if not msg["oob"]["url"]: + if urls := self.get_urls(msg): + await self.parse_urls(msg, urls, sender, mtype) + except Exception as e: + print(e) + + async def muc_message(self, msg): + """Process a groupchat message.""" + if msg["type"] in ("groupchat", "normal"): + mtype = "groupchat" + sender = msg["from"].bare + if msg["mucnick"] == self.nick: + return + + ctx = msg["body"].strip().split() + + try: + if not msg["oob"]["url"]: + if urls := self.get_urls(msg): + await self.parse_urls(msg, urls, sender, mtype) + except Exception: + pass + + +if __name__ == "__main__": + config = configparser.ConfigParser() + config.read("config.ini") + jid = config["chen"]["jid"] + password = config["chen"]["password"] + nick = config["chen"]["nick"] + autojoin = config["chen"]["autojoin"].split() + bot = ChenBot(jid, password, nick, autojoin=autojoin) + + bot.connect() + bot.process(forever=True) diff --git a/branches/master/requirements.txt b/branches/master/requirements.txt new file mode 100644 index 0000000..9b9d03a --- /dev/null +++ b/branches/master/requirements.txt @@ -0,0 +1,6 @@ +requests +slixmpp +beautifulsoup4 +pantomime +aiohttp +git+https://git.chaotic.ninja/yakumo.izuru/ecgi#egg=ecgi diff --git a/branches/master/run.sh b/branches/master/run.sh new file mode 100755 index 0000000..146b4fa --- /dev/null +++ b/branches/master/run.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# $TheSupernovaDuo$ +echo "Starting bot..." +python-3.9 main.py 2>chen.log diff --git a/branches/master/services/chen.service b/branches/master/services/chen.service new file mode 100644 index 0000000..0c2f885 --- /dev/null +++ b/branches/master/services/chen.service @@ -0,0 +1,19 @@ +# $YakumoLabs$ +# vim: ft=systemd +[Unit] +Description=XMPP bot to preview links and file contents +After=network.target +After=prosody.service +After=ejabberd.service + +[Service] +Type=simple +Restart=always +RestartSec=10 +StartLimitBurst=5 +StartLimitInterval=100 +WorkingDirectory=%h/chen/ +ExecStart=/usr/bin/python main.py + +[Install] +WantedBy=multi-user.target diff --git a/branches/master/services/chen.yml b/branches/master/services/chen.yml new file mode 100644 index 0000000..c75d47a --- /dev/null +++ b/branches/master/services/chen.yml @@ -0,0 +1,6 @@ +# $YakumoLabs$ +# vim: ft=yaml +# +# Note: %h must be replaced by the user's home directory path +cmd: /usr/bin/env python3 main.py +cwd: %h/chen diff --git a/branches/origin-master/.gitignore b/branches/origin-master/.gitignore new file mode 100644 index 0000000..2fa7ce7 --- /dev/null +++ b/branches/origin-master/.gitignore @@ -0,0 +1 @@ +config.ini diff --git a/branches/origin-master/COPYING b/branches/origin-master/COPYING new file mode 100644 index 0000000..5aabf52 --- /dev/null +++ b/branches/origin-master/COPYING @@ -0,0 +1,4 @@ +Freedom License v1 (2023年05月11日) + +全く無限的自由です。 +It's infinite freedom. diff --git a/branches/origin-master/Makefile b/branches/origin-master/Makefile new file mode 100644 index 0000000..870c59d --- /dev/null +++ b/branches/origin-master/Makefile @@ -0,0 +1,10 @@ +# $TheSupernovaDuo$ +all: + @echo "Commands available" + @echo "==================" + @echo "deps -- fetch and install dependencies" + @echo "format -- format code using python-black" +deps: + pip install --user -r requirements.txt +format: + black main.py diff --git a/branches/origin-master/README b/branches/origin-master/README new file mode 100644 index 0000000..35474bd --- /dev/null +++ b/branches/origin-master/README @@ -0,0 +1,20 @@ +chen +==== + +XMPP bot to preview links and file contents. Shikigami of the Shikigami of the Gap Youkai +Based on Angel[1], without the sed(1) and YT redirect features. + +Requirements +------------ + +* Python >= 3.7 + +Run +--- + +* pip3 install --user -r requirements.txt +* $EDITOR config.ini.default (save as config.ini) +* python3 main.py + + +[1]: https://wiki.kalli.st/Angel diff --git a/branches/origin-master/avatar.png b/branches/origin-master/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e7231449608708c705eb5d07fe010840edf8e0 GIT binary patch literal 72424 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%0Dr%KXD!4W3rvu_nSNTmWo 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 literal 0 HcmV?d00001 diff --git a/branches/origin-master/config.ini.default b/branches/origin-master/config.ini.default new file mode 100644 index 0000000..c8348a8 --- /dev/null +++ b/branches/origin-master/config.ini.default @@ -0,0 +1,5 @@ +[chen] +jid = chen@example.com +password = b0TPA55W0rD +nick = Chen +autojoin = room1@muc.example.com room2@muc.example.com room3@muc.example.com diff --git a/branches/origin-master/main.py b/branches/origin-master/main.py new file mode 100644 index 0000000..51acbaa --- /dev/null +++ b/branches/origin-master/main.py @@ -0,0 +1,274 @@ +import requests +import bs4 +import random +import configparser +import re +import io +import os +import mimetypes +import asyncio +from collections import defaultdict +from slixmpp import ClientXMPP +from urllib.parse import urlparse, parse_qs, urlunparse +from pantomime import normalize_mimetype +import ecgi + +parser = "html.parser" +user_agent = "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0" +accept_lang = "en-US" +data_limit = 786400000 + +headers = { + "user-agent": user_agent, + "Accept-Language": accept_lang, + "Cache-Control": "no-cache", +} +block_list = ( + "localhost", + "127.0.0.1", + "0.0.0.0", + "youtu.be", + "www.youtube.com", + "youtube.com", + "m.youtube.com", + "music.youtube.com", +) +req_list = ( + "http://", + "https://", +) +html_files = ( + "text/html", + "application/xhtml+xml", +) + + +class Lifo(list): + """ + Limited size LIFO array to store messages and urls + """ + + def __init__(self, size): + super().__init__() + self.size = size + + def add(self, item): + self.insert(0, item) + if len(self) > self.size: + self.pop() + + +# Cheeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeen +class ChenBot(ClientXMPP): + commands = {} + muc_commands = {} + + messages = defaultdict( + lambda: { + "messages": Lifo(100), + "links": Lifo(10), + "previews": Lifo(10), + } + ) + + def get_urls(self, msg): + str_list = msg["body"].strip().split() + urls = [u for u in str_list if any(r in u for r in req_list)] + return urls + + async def parse_uri(self, uri, sender, mtype): + """Parse a URI and send the result to the sender.""" + netloc = uri.netloc + if netloc.split(":")[0] in block_list: + return + else: + await self.process_link(uri, sender, mtype) + + async def process_link(self, uri, sender, mtype): + """Process a link and send the result to the sender.""" + url = urlunparse(uri) + r = requests.get(url, stream=True, headers=headers, timeout=5) + if not r.ok: + return + ftype = normalize_mimetype(r.headers.get("content-type")) + if ftype in html_files: + data = "" + for i in r.iter_content(chunk_size=1024, decode_unicode=False): + data += i.decode("utf-8", errors="ignore") + if len(data) > data_limit or "" in data.lower(): + break + soup = bs4.BeautifulSoup(data, parser) + if title := soup.find("title"): + output = title.text.strip() + if output: + output = f"*{output}*" if ("\n" not in output) else output + if output in self.messages[sender]["previews"]: + return + + self.messages[sender]["previews"].add(output) + if r.history: + self.send_message(mto=sender, mbody=r.url, mtype=mtype) + self.send_message(mto=sender, mbody=output, mtype=mtype) + + else: + try: + length = 0 + outfile = io.BytesIO() + for chunk in r.iter_content( + chunk_size=512, + decode_unicode=False, + ): + length += 512 + if length >= data_limit: + return + outfile.write(chunk) + + content_disposition = r.headers.get("content-disposition") + filename = None + if content_disposition: + _, params = ecgi.parse_header(content_disposition) + filename = params.get("filename") + else: + filename = os.path.basename(uri.path) + + ext = os.path.splitext(filename)[1] if filename else ".txt" + fname = filename if filename else f"file{ext}" + await self.embed_file(url, sender, mtype, ftype, fname, outfile) + except Exception as e: + print(e) + + async def embed_file(self, url, sender, mtype, ftype, fname, outfile): + """Embed a file and send the result to the sender.""" + furl = await self.plugin["xep_0363"].upload_file( + fname, content_type=ftype, input_file=outfile + ) + message = self.make_message(sender) + message["body"] = furl + message["type"] = mtype + message["oob"]["url"] = furl + message.send() + + async def parse_urls(self, msg, urls, sender, mtype): + body = msg["body"].lower() + if "nsfl" in body: + return + if "nsfw" in body: + return + if "#nospoil" in body: + return + for u in urls: + if u in self.messages[sender]["links"]: + continue + else: + self.messages[sender]["links"].add(u) + + uri = urlparse(u) + await self.parse_uri(uri, sender, mtype) + + def __init__(self, jid, password, nick, autojoin=None): + ClientXMPP.__init__(self, jid, password) + self.jid = jid + self.nick = nick or [] + self.autojoin = autojoin or [] + self.register_plugin("xep_0030") + self.register_plugin("xep_0060") + self.register_plugin("xep_0054") + self.register_plugin("xep_0045") + self.register_plugin("xep_0066") + self.register_plugin("xep_0084") + self.register_plugin("xep_0153") + self.register_plugin("xep_0363") + + self.add_event_handler("session_start", self.session_start) + self.add_event_handler("message", self.message) + self.add_event_handler("groupchat_message", self.muc_message) + self.add_event_handler("disconnected", lambda _: self.connect()) + + async def session_start(self, event): + """Start the bot.""" + self.send_presence() + await self.get_roster() + await self.update_info() + for channel in self.autojoin: + try: + self.plugin["xep_0045"].join_muc(channel, self.nick) + except Exception as e: + print(e) + + async def update_info(self): + """Update the bot info.""" + with open("avatar.png", "rb") as avatar_file: + avatar = avatar_file.read() + + avatar_type = "image/png" + avatar_id = self.plugin["xep_0084"].generate_id(avatar) + avatar_bytes = len(avatar) + + asyncio.gather(self.plugin["xep_0084"].publish_avatar(avatar)) + asyncio.gather( + self.plugin["xep_0153"].set_avatar( + avatar=avatar, + mtype=avatar_type, + ) + ) + + info = { + "id": avatar_id, + "type": avatar_type, + "bytes": avatar_bytes, + } + + asyncio.gather(self.plugin["xep_0084"].publish_avatar_metadata([info])) + + vcard = self.plugin["xep_0054"].make_vcard() + vcard["URL"] = "https://git.chaotic.ninja/yakumo.izuru/chen" + vcard["DESC"] = "Shikigami of the Shikigami of the Gap Youkai" + vcard["NICKNAME"] = "Chen" + vcard["FN"] = "Chen" + asyncio.gather(self.plugin["xep_0054"].publish_vcard(vcard)) + + async def message(self, msg): + """Process a message.""" + if msg["type"] in ("chat", "normal"): + mtype = "chat" + sender = msg["from"].bare + message = msg["body"] + + ctx = message.strip().split() + + try: + if not msg["oob"]["url"]: + if urls := self.get_urls(msg): + await self.parse_urls(msg, urls, sender, mtype) + except Exception as e: + print(e) + + async def muc_message(self, msg): + """Process a groupchat message.""" + if msg["type"] in ("groupchat", "normal"): + mtype = "groupchat" + sender = msg["from"].bare + if msg["mucnick"] == self.nick: + return + + ctx = msg["body"].strip().split() + + try: + if not msg["oob"]["url"]: + if urls := self.get_urls(msg): + await self.parse_urls(msg, urls, sender, mtype) + except Exception: + pass + + +if __name__ == "__main__": + config = configparser.ConfigParser() + config.read("config.ini") + jid = config["chen"]["jid"] + password = config["chen"]["password"] + nick = config["chen"]["nick"] + autojoin = config["chen"]["autojoin"].split() + bot = ChenBot(jid, password, nick, autojoin=autojoin) + + bot.connect() + bot.process(forever=True) diff --git a/branches/origin-master/requirements.txt b/branches/origin-master/requirements.txt new file mode 100644 index 0000000..9b9d03a --- /dev/null +++ b/branches/origin-master/requirements.txt @@ -0,0 +1,6 @@ +requests +slixmpp +beautifulsoup4 +pantomime +aiohttp +git+https://git.chaotic.ninja/yakumo.izuru/ecgi#egg=ecgi diff --git a/branches/origin-master/run.sh b/branches/origin-master/run.sh new file mode 100755 index 0000000..146b4fa --- /dev/null +++ b/branches/origin-master/run.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# $TheSupernovaDuo$ +echo "Starting bot..." +python-3.9 main.py 2>chen.log diff --git a/branches/origin-master/services/chen.service b/branches/origin-master/services/chen.service new file mode 100644 index 0000000..0c2f885 --- /dev/null +++ b/branches/origin-master/services/chen.service @@ -0,0 +1,19 @@ +# $YakumoLabs$ +# vim: ft=systemd +[Unit] +Description=XMPP bot to preview links and file contents +After=network.target +After=prosody.service +After=ejabberd.service + +[Service] +Type=simple +Restart=always +RestartSec=10 +StartLimitBurst=5 +StartLimitInterval=100 +WorkingDirectory=%h/chen/ +ExecStart=/usr/bin/python main.py + +[Install] +WantedBy=multi-user.target diff --git a/branches/origin-master/services/chen.yml b/branches/origin-master/services/chen.yml new file mode 100644 index 0000000..c75d47a --- /dev/null +++ b/branches/origin-master/services/chen.yml @@ -0,0 +1,6 @@ +# $YakumoLabs$ +# vim: ft=yaml +# +# Note: %h must be replaced by the user's home directory path +cmd: /usr/bin/env python3 main.py +cwd: %h/chen diff --git a/branches/origin/.gitignore b/branches/origin/.gitignore new file mode 100644 index 0000000..2fa7ce7 --- /dev/null +++ b/branches/origin/.gitignore @@ -0,0 +1 @@ +config.ini diff --git a/branches/origin/COPYING b/branches/origin/COPYING new file mode 100644 index 0000000..5aabf52 --- /dev/null +++ b/branches/origin/COPYING @@ -0,0 +1,4 @@ +Freedom License v1 (2023年05月11日) + +全く無限的自由です。 +It's infinite freedom. diff --git a/branches/origin/Makefile b/branches/origin/Makefile new file mode 100644 index 0000000..870c59d --- /dev/null +++ b/branches/origin/Makefile @@ -0,0 +1,10 @@ +# $TheSupernovaDuo$ +all: + @echo "Commands available" + @echo "==================" + @echo "deps -- fetch and install dependencies" + @echo "format -- format code using python-black" +deps: + pip install --user -r requirements.txt +format: + black main.py diff --git a/branches/origin/README b/branches/origin/README new file mode 100644 index 0000000..35474bd --- /dev/null +++ b/branches/origin/README @@ -0,0 +1,20 @@ +chen +==== + +XMPP bot to preview links and file contents. Shikigami of the Shikigami of the Gap Youkai +Based on Angel[1], without the sed(1) and YT redirect features. + +Requirements +------------ + +* Python >= 3.7 + +Run +--- + +* pip3 install --user -r requirements.txt +* $EDITOR config.ini.default (save as config.ini) +* python3 main.py + + +[1]: https://wiki.kalli.st/Angel diff --git a/branches/origin/avatar.png b/branches/origin/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e7231449608708c705eb5d07fe010840edf8e0 GIT binary patch literal 72424 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%0Dr%KXD!4W3rvu_nSNTmWo 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 literal 0 HcmV?d00001 diff --git a/branches/origin/config.ini.default b/branches/origin/config.ini.default new file mode 100644 index 0000000..c8348a8 --- /dev/null +++ b/branches/origin/config.ini.default @@ -0,0 +1,5 @@ +[chen] +jid = chen@example.com +password = b0TPA55W0rD +nick = Chen +autojoin = room1@muc.example.com room2@muc.example.com room3@muc.example.com diff --git a/branches/origin/main.py b/branches/origin/main.py new file mode 100644 index 0000000..51acbaa --- /dev/null +++ b/branches/origin/main.py @@ -0,0 +1,274 @@ +import requests +import bs4 +import random +import configparser +import re +import io +import os +import mimetypes +import asyncio +from collections import defaultdict +from slixmpp import ClientXMPP +from urllib.parse import urlparse, parse_qs, urlunparse +from pantomime import normalize_mimetype +import ecgi + +parser = "html.parser" +user_agent = "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0" +accept_lang = "en-US" +data_limit = 786400000 + +headers = { + "user-agent": user_agent, + "Accept-Language": accept_lang, + "Cache-Control": "no-cache", +} +block_list = ( + "localhost", + "127.0.0.1", + "0.0.0.0", + "youtu.be", + "www.youtube.com", + "youtube.com", + "m.youtube.com", + "music.youtube.com", +) +req_list = ( + "http://", + "https://", +) +html_files = ( + "text/html", + "application/xhtml+xml", +) + + +class Lifo(list): + """ + Limited size LIFO array to store messages and urls + """ + + def __init__(self, size): + super().__init__() + self.size = size + + def add(self, item): + self.insert(0, item) + if len(self) > self.size: + self.pop() + + +# Cheeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeen +class ChenBot(ClientXMPP): + commands = {} + muc_commands = {} + + messages = defaultdict( + lambda: { + "messages": Lifo(100), + "links": Lifo(10), + "previews": Lifo(10), + } + ) + + def get_urls(self, msg): + str_list = msg["body"].strip().split() + urls = [u for u in str_list if any(r in u for r in req_list)] + return urls + + async def parse_uri(self, uri, sender, mtype): + """Parse a URI and send the result to the sender.""" + netloc = uri.netloc + if netloc.split(":")[0] in block_list: + return + else: + await self.process_link(uri, sender, mtype) + + async def process_link(self, uri, sender, mtype): + """Process a link and send the result to the sender.""" + url = urlunparse(uri) + r = requests.get(url, stream=True, headers=headers, timeout=5) + if not r.ok: + return + ftype = normalize_mimetype(r.headers.get("content-type")) + if ftype in html_files: + data = "" + for i in r.iter_content(chunk_size=1024, decode_unicode=False): + data += i.decode("utf-8", errors="ignore") + if len(data) > data_limit or "" in data.lower(): + break + soup = bs4.BeautifulSoup(data, parser) + if title := soup.find("title"): + output = title.text.strip() + if output: + output = f"*{output}*" if ("\n" not in output) else output + if output in self.messages[sender]["previews"]: + return + + self.messages[sender]["previews"].add(output) + if r.history: + self.send_message(mto=sender, mbody=r.url, mtype=mtype) + self.send_message(mto=sender, mbody=output, mtype=mtype) + + else: + try: + length = 0 + outfile = io.BytesIO() + for chunk in r.iter_content( + chunk_size=512, + decode_unicode=False, + ): + length += 512 + if length >= data_limit: + return + outfile.write(chunk) + + content_disposition = r.headers.get("content-disposition") + filename = None + if content_disposition: + _, params = ecgi.parse_header(content_disposition) + filename = params.get("filename") + else: + filename = os.path.basename(uri.path) + + ext = os.path.splitext(filename)[1] if filename else ".txt" + fname = filename if filename else f"file{ext}" + await self.embed_file(url, sender, mtype, ftype, fname, outfile) + except Exception as e: + print(e) + + async def embed_file(self, url, sender, mtype, ftype, fname, outfile): + """Embed a file and send the result to the sender.""" + furl = await self.plugin["xep_0363"].upload_file( + fname, content_type=ftype, input_file=outfile + ) + message = self.make_message(sender) + message["body"] = furl + message["type"] = mtype + message["oob"]["url"] = furl + message.send() + + async def parse_urls(self, msg, urls, sender, mtype): + body = msg["body"].lower() + if "nsfl" in body: + return + if "nsfw" in body: + return + if "#nospoil" in body: + return + for u in urls: + if u in self.messages[sender]["links"]: + continue + else: + self.messages[sender]["links"].add(u) + + uri = urlparse(u) + await self.parse_uri(uri, sender, mtype) + + def __init__(self, jid, password, nick, autojoin=None): + ClientXMPP.__init__(self, jid, password) + self.jid = jid + self.nick = nick or [] + self.autojoin = autojoin or [] + self.register_plugin("xep_0030") + self.register_plugin("xep_0060") + self.register_plugin("xep_0054") + self.register_plugin("xep_0045") + self.register_plugin("xep_0066") + self.register_plugin("xep_0084") + self.register_plugin("xep_0153") + self.register_plugin("xep_0363") + + self.add_event_handler("session_start", self.session_start) + self.add_event_handler("message", self.message) + self.add_event_handler("groupchat_message", self.muc_message) + self.add_event_handler("disconnected", lambda _: self.connect()) + + async def session_start(self, event): + """Start the bot.""" + self.send_presence() + await self.get_roster() + await self.update_info() + for channel in self.autojoin: + try: + self.plugin["xep_0045"].join_muc(channel, self.nick) + except Exception as e: + print(e) + + async def update_info(self): + """Update the bot info.""" + with open("avatar.png", "rb") as avatar_file: + avatar = avatar_file.read() + + avatar_type = "image/png" + avatar_id = self.plugin["xep_0084"].generate_id(avatar) + avatar_bytes = len(avatar) + + asyncio.gather(self.plugin["xep_0084"].publish_avatar(avatar)) + asyncio.gather( + self.plugin["xep_0153"].set_avatar( + avatar=avatar, + mtype=avatar_type, + ) + ) + + info = { + "id": avatar_id, + "type": avatar_type, + "bytes": avatar_bytes, + } + + asyncio.gather(self.plugin["xep_0084"].publish_avatar_metadata([info])) + + vcard = self.plugin["xep_0054"].make_vcard() + vcard["URL"] = "https://git.chaotic.ninja/yakumo.izuru/chen" + vcard["DESC"] = "Shikigami of the Shikigami of the Gap Youkai" + vcard["NICKNAME"] = "Chen" + vcard["FN"] = "Chen" + asyncio.gather(self.plugin["xep_0054"].publish_vcard(vcard)) + + async def message(self, msg): + """Process a message.""" + if msg["type"] in ("chat", "normal"): + mtype = "chat" + sender = msg["from"].bare + message = msg["body"] + + ctx = message.strip().split() + + try: + if not msg["oob"]["url"]: + if urls := self.get_urls(msg): + await self.parse_urls(msg, urls, sender, mtype) + except Exception as e: + print(e) + + async def muc_message(self, msg): + """Process a groupchat message.""" + if msg["type"] in ("groupchat", "normal"): + mtype = "groupchat" + sender = msg["from"].bare + if msg["mucnick"] == self.nick: + return + + ctx = msg["body"].strip().split() + + try: + if not msg["oob"]["url"]: + if urls := self.get_urls(msg): + await self.parse_urls(msg, urls, sender, mtype) + except Exception: + pass + + +if __name__ == "__main__": + config = configparser.ConfigParser() + config.read("config.ini") + jid = config["chen"]["jid"] + password = config["chen"]["password"] + nick = config["chen"]["nick"] + autojoin = config["chen"]["autojoin"].split() + bot = ChenBot(jid, password, nick, autojoin=autojoin) + + bot.connect() + bot.process(forever=True) diff --git a/branches/origin/requirements.txt b/branches/origin/requirements.txt new file mode 100644 index 0000000..9b9d03a --- /dev/null +++ b/branches/origin/requirements.txt @@ -0,0 +1,6 @@ +requests +slixmpp +beautifulsoup4 +pantomime +aiohttp +git+https://git.chaotic.ninja/yakumo.izuru/ecgi#egg=ecgi diff --git a/branches/origin/run.sh b/branches/origin/run.sh new file mode 100755 index 0000000..146b4fa --- /dev/null +++ b/branches/origin/run.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# $TheSupernovaDuo$ +echo "Starting bot..." +python-3.9 main.py 2>chen.log diff --git a/branches/origin/services/chen.service b/branches/origin/services/chen.service new file mode 100644 index 0000000..0c2f885 --- /dev/null +++ b/branches/origin/services/chen.service @@ -0,0 +1,19 @@ +# $YakumoLabs$ +# vim: ft=systemd +[Unit] +Description=XMPP bot to preview links and file contents +After=network.target +After=prosody.service +After=ejabberd.service + +[Service] +Type=simple +Restart=always +RestartSec=10 +StartLimitBurst=5 +StartLimitInterval=100 +WorkingDirectory=%h/chen/ +ExecStart=/usr/bin/python main.py + +[Install] +WantedBy=multi-user.target diff --git a/branches/origin/services/chen.yml b/branches/origin/services/chen.yml new file mode 100644 index 0000000..c75d47a --- /dev/null +++ b/branches/origin/services/chen.yml @@ -0,0 +1,6 @@ +# $YakumoLabs$ +# vim: ft=yaml +# +# Note: %h must be replaced by the user's home directory path +cmd: /usr/bin/env python3 main.py +cwd: %h/chen diff --git a/trunk/.gitignore b/trunk/.gitignore new file mode 100644 index 0000000..2fa7ce7 --- /dev/null +++ b/trunk/.gitignore @@ -0,0 +1 @@ +config.ini diff --git a/trunk/COPYING b/trunk/COPYING new file mode 100644 index 0000000..5aabf52 --- /dev/null +++ b/trunk/COPYING @@ -0,0 +1,4 @@ +Freedom License v1 (2023年05月11日) + +全く無限的自由です。 +It's infinite freedom. diff --git a/trunk/Makefile b/trunk/Makefile new file mode 100644 index 0000000..870c59d --- /dev/null +++ b/trunk/Makefile @@ -0,0 +1,10 @@ +# $TheSupernovaDuo$ +all: + @echo "Commands available" + @echo "==================" + @echo "deps -- fetch and install dependencies" + @echo "format -- format code using python-black" +deps: + pip install --user -r requirements.txt +format: + black main.py diff --git a/trunk/README b/trunk/README new file mode 100644 index 0000000..35474bd --- /dev/null +++ b/trunk/README @@ -0,0 +1,20 @@ +chen +==== + +XMPP bot to preview links and file contents. Shikigami of the Shikigami of the Gap Youkai +Based on Angel[1], without the sed(1) and YT redirect features. + +Requirements +------------ + +* Python >= 3.7 + +Run +--- + +* pip3 install --user -r requirements.txt +* $EDITOR config.ini.default (save as config.ini) +* python3 main.py + + +[1]: https://wiki.kalli.st/Angel diff --git a/trunk/avatar.png b/trunk/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e7231449608708c705eb5d07fe010840edf8e0 GIT binary patch literal 72424 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%0Dr%KXD!4W3rvu_nSNTmWo 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 literal 0 HcmV?d00001 diff --git a/trunk/config.ini.default b/trunk/config.ini.default new file mode 100644 index 0000000..c8348a8 --- /dev/null +++ b/trunk/config.ini.default @@ -0,0 +1,5 @@ +[chen] +jid = chen@example.com +password = b0TPA55W0rD +nick = Chen +autojoin = room1@muc.example.com room2@muc.example.com room3@muc.example.com diff --git a/trunk/main.py b/trunk/main.py new file mode 100644 index 0000000..51acbaa --- /dev/null +++ b/trunk/main.py @@ -0,0 +1,274 @@ +import requests +import bs4 +import random +import configparser +import re +import io +import os +import mimetypes +import asyncio +from collections import defaultdict +from slixmpp import ClientXMPP +from urllib.parse import urlparse, parse_qs, urlunparse +from pantomime import normalize_mimetype +import ecgi + +parser = "html.parser" +user_agent = "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0" +accept_lang = "en-US" +data_limit = 786400000 + +headers = { + "user-agent": user_agent, + "Accept-Language": accept_lang, + "Cache-Control": "no-cache", +} +block_list = ( + "localhost", + "127.0.0.1", + "0.0.0.0", + "youtu.be", + "www.youtube.com", + "youtube.com", + "m.youtube.com", + "music.youtube.com", +) +req_list = ( + "http://", + "https://", +) +html_files = ( + "text/html", + "application/xhtml+xml", +) + + +class Lifo(list): + """ + Limited size LIFO array to store messages and urls + """ + + def __init__(self, size): + super().__init__() + self.size = size + + def add(self, item): + self.insert(0, item) + if len(self) > self.size: + self.pop() + + +# Cheeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeen +class ChenBot(ClientXMPP): + commands = {} + muc_commands = {} + + messages = defaultdict( + lambda: { + "messages": Lifo(100), + "links": Lifo(10), + "previews": Lifo(10), + } + ) + + def get_urls(self, msg): + str_list = msg["body"].strip().split() + urls = [u for u in str_list if any(r in u for r in req_list)] + return urls + + async def parse_uri(self, uri, sender, mtype): + """Parse a URI and send the result to the sender.""" + netloc = uri.netloc + if netloc.split(":")[0] in block_list: + return + else: + await self.process_link(uri, sender, mtype) + + async def process_link(self, uri, sender, mtype): + """Process a link and send the result to the sender.""" + url = urlunparse(uri) + r = requests.get(url, stream=True, headers=headers, timeout=5) + if not r.ok: + return + ftype = normalize_mimetype(r.headers.get("content-type")) + if ftype in html_files: + data = "" + for i in r.iter_content(chunk_size=1024, decode_unicode=False): + data += i.decode("utf-8", errors="ignore") + if len(data) > data_limit or "" in data.lower(): + break + soup = bs4.BeautifulSoup(data, parser) + if title := soup.find("title"): + output = title.text.strip() + if output: + output = f"*{output}*" if ("\n" not in output) else output + if output in self.messages[sender]["previews"]: + return + + self.messages[sender]["previews"].add(output) + if r.history: + self.send_message(mto=sender, mbody=r.url, mtype=mtype) + self.send_message(mto=sender, mbody=output, mtype=mtype) + + else: + try: + length = 0 + outfile = io.BytesIO() + for chunk in r.iter_content( + chunk_size=512, + decode_unicode=False, + ): + length += 512 + if length >= data_limit: + return + outfile.write(chunk) + + content_disposition = r.headers.get("content-disposition") + filename = None + if content_disposition: + _, params = ecgi.parse_header(content_disposition) + filename = params.get("filename") + else: + filename = os.path.basename(uri.path) + + ext = os.path.splitext(filename)[1] if filename else ".txt" + fname = filename if filename else f"file{ext}" + await self.embed_file(url, sender, mtype, ftype, fname, outfile) + except Exception as e: + print(e) + + async def embed_file(self, url, sender, mtype, ftype, fname, outfile): + """Embed a file and send the result to the sender.""" + furl = await self.plugin["xep_0363"].upload_file( + fname, content_type=ftype, input_file=outfile + ) + message = self.make_message(sender) + message["body"] = furl + message["type"] = mtype + message["oob"]["url"] = furl + message.send() + + async def parse_urls(self, msg, urls, sender, mtype): + body = msg["body"].lower() + if "nsfl" in body: + return + if "nsfw" in body: + return + if "#nospoil" in body: + return + for u in urls: + if u in self.messages[sender]["links"]: + continue + else: + self.messages[sender]["links"].add(u) + + uri = urlparse(u) + await self.parse_uri(uri, sender, mtype) + + def __init__(self, jid, password, nick, autojoin=None): + ClientXMPP.__init__(self, jid, password) + self.jid = jid + self.nick = nick or [] + self.autojoin = autojoin or [] + self.register_plugin("xep_0030") + self.register_plugin("xep_0060") + self.register_plugin("xep_0054") + self.register_plugin("xep_0045") + self.register_plugin("xep_0066") + self.register_plugin("xep_0084") + self.register_plugin("xep_0153") + self.register_plugin("xep_0363") + + self.add_event_handler("session_start", self.session_start) + self.add_event_handler("message", self.message) + self.add_event_handler("groupchat_message", self.muc_message) + self.add_event_handler("disconnected", lambda _: self.connect()) + + async def session_start(self, event): + """Start the bot.""" + self.send_presence() + await self.get_roster() + await self.update_info() + for channel in self.autojoin: + try: + self.plugin["xep_0045"].join_muc(channel, self.nick) + except Exception as e: + print(e) + + async def update_info(self): + """Update the bot info.""" + with open("avatar.png", "rb") as avatar_file: + avatar = avatar_file.read() + + avatar_type = "image/png" + avatar_id = self.plugin["xep_0084"].generate_id(avatar) + avatar_bytes = len(avatar) + + asyncio.gather(self.plugin["xep_0084"].publish_avatar(avatar)) + asyncio.gather( + self.plugin["xep_0153"].set_avatar( + avatar=avatar, + mtype=avatar_type, + ) + ) + + info = { + "id": avatar_id, + "type": avatar_type, + "bytes": avatar_bytes, + } + + asyncio.gather(self.plugin["xep_0084"].publish_avatar_metadata([info])) + + vcard = self.plugin["xep_0054"].make_vcard() + vcard["URL"] = "https://git.chaotic.ninja/yakumo.izuru/chen" + vcard["DESC"] = "Shikigami of the Shikigami of the Gap Youkai" + vcard["NICKNAME"] = "Chen" + vcard["FN"] = "Chen" + asyncio.gather(self.plugin["xep_0054"].publish_vcard(vcard)) + + async def message(self, msg): + """Process a message.""" + if msg["type"] in ("chat", "normal"): + mtype = "chat" + sender = msg["from"].bare + message = msg["body"] + + ctx = message.strip().split() + + try: + if not msg["oob"]["url"]: + if urls := self.get_urls(msg): + await self.parse_urls(msg, urls, sender, mtype) + except Exception as e: + print(e) + + async def muc_message(self, msg): + """Process a groupchat message.""" + if msg["type"] in ("groupchat", "normal"): + mtype = "groupchat" + sender = msg["from"].bare + if msg["mucnick"] == self.nick: + return + + ctx = msg["body"].strip().split() + + try: + if not msg["oob"]["url"]: + if urls := self.get_urls(msg): + await self.parse_urls(msg, urls, sender, mtype) + except Exception: + pass + + +if __name__ == "__main__": + config = configparser.ConfigParser() + config.read("config.ini") + jid = config["chen"]["jid"] + password = config["chen"]["password"] + nick = config["chen"]["nick"] + autojoin = config["chen"]["autojoin"].split() + bot = ChenBot(jid, password, nick, autojoin=autojoin) + + bot.connect() + bot.process(forever=True) diff --git a/trunk/requirements.txt b/trunk/requirements.txt new file mode 100644 index 0000000..9b9d03a --- /dev/null +++ b/trunk/requirements.txt @@ -0,0 +1,6 @@ +requests +slixmpp +beautifulsoup4 +pantomime +aiohttp +git+https://git.chaotic.ninja/yakumo.izuru/ecgi#egg=ecgi diff --git a/trunk/run.sh b/trunk/run.sh new file mode 100755 index 0000000..146b4fa --- /dev/null +++ b/trunk/run.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# $TheSupernovaDuo$ +echo "Starting bot..." +python-3.9 main.py 2>chen.log diff --git a/trunk/services/chen.service b/trunk/services/chen.service new file mode 100644 index 0000000..0c2f885 --- /dev/null +++ b/trunk/services/chen.service @@ -0,0 +1,19 @@ +# $YakumoLabs$ +# vim: ft=systemd +[Unit] +Description=XMPP bot to preview links and file contents +After=network.target +After=prosody.service +After=ejabberd.service + +[Service] +Type=simple +Restart=always +RestartSec=10 +StartLimitBurst=5 +StartLimitInterval=100 +WorkingDirectory=%h/chen/ +ExecStart=/usr/bin/python main.py + +[Install] +WantedBy=multi-user.target diff --git a/trunk/services/chen.yml b/trunk/services/chen.yml new file mode 100644 index 0000000..c75d47a --- /dev/null +++ b/trunk/services/chen.yml @@ -0,0 +1,6 @@ +# $YakumoLabs$ +# vim: ft=yaml +# +# Note: %h must be replaced by the user's home directory path +cmd: /usr/bin/env python3 main.py +cwd: %h/chen -- 2.45.2