diff --git a/account.json.sample b/account.json.example similarity index 100% rename from account.json.sample rename to account.json.example diff --git a/tildeverse.json.example b/tildeverse.json.example new file mode 100644 index 0000000..278308d --- /dev/null +++ b/tildeverse.json.example @@ -0,0 +1,8 @@ +{ + "client_id": "myclientid", + "client_secret": "myclientsecret", + "access_token": "myaccesstoken", + "base_url": "https://tilde.zone", + "channel": "remove this key if you don't want to limit the bot" +} + diff --git a/tooter.py b/tooter.py index f34209b..ba80e2e 100644 --- a/tooter.py +++ b/tooter.py @@ -10,38 +10,35 @@ import emoji import glob import json import os -import re import sys HELPTEXT = "helo i can send toots from irc: @tildeverse@tilde.zone - from @tildeteam from the #team channel)" - -def masto_from_json(conf): - conf = json.load(conf) - return Mastodon( - client_id=conf["client_id"], - client_secret=conf["client_secret"], - access_token=conf["access_token"], - api_base_url=conf["base_url"], - ) - - masto = {} +assigned_channels = {} # load masto creds for cred in glob.glob("tilde*.json"): shortname, _ = os.path.splitext(cred) with open(cred, "r") as f: - masto[shortname] = masto_from_json(f) + conf = json.load(f) + if "channel" in conf: + assigned_channels[conf["channel"]] = shortname + masto[shortname] = Mastodon( + client_id=conf["client_id"], + client_secret=conf["client_secret"], + access_token=conf["access_token"], + api_base_url=conf["base_url"], + ) + +if "tildeverse" not in masto: + print("you must populate tildeverse.json with mastodon credentials") + exit(1) # do setup -path = os.path.dirname(os.path.abspath(__file__)) - -with open(os.path.join(path, "config.json"), "r") as f: +with open("config.json", "r") as f: config = json.load(f) - -if os.path.isfile(os.path.join(path, "account.json")): - with open(os.path.join(path, "account.json"), "r") as f: - account = json.load(f) +with open("account.json", "r") as f: + account = json.load(f) channels = config["channels"] if len(sys.argv) > 1: @@ -52,25 +49,20 @@ if len(sys.argv) > 1: def think(line): chan = line.params[0] words = line.params[1].split(" ") + cmd = words[0].lower() - if len(words) > 0: - cmd = words[0].lower() - if cmd == "!toot": - if len(words) >= 2: - status = emoji.emojize(" ".join(words[1:]), use_aliases=True) - if chan == "#team": - res = masto["tildeteam"].toot(status) - elif chan == "#club": - res = masto["tildeclub"].toot(status) - else: - res = masto["tildeverse"].toot(status) - print(res) - return "tooted! {}".format(res["url"]) - else: - return HELPTEXT - elif cmd == "!source": - return "https://tildegit.org/ben/tooter" - elif cmd in ["!botlist", "!toothelp"]: + if cmd == "!source": + return "https://tildegit.org/ben/tooter" + elif cmd in ["!botlist", "!toothelp"]: + return HELPTEXT + elif cmd == "!toot": + if len(words) >= 2: + status = emoji.emojize(" ".join(words[1:]), use_aliases=True) + res = masto[ + assigned_channels[chan] if chan in assigned_channels else "tildeverse" + ].toot(status) + return "tooted! {}".format(res["url"]) + else: return HELPTEXT @@ -81,18 +73,17 @@ class Server(BaseServer): async def line_read(self, line: Line): print(f"{self.name} < {line.format()}") if line.command == "001": - print(f"connected to {self.isupport.network}") await self.send(build("JOIN", [",".join(channels)])) await self.send(build("MODE", [self.nickname, "+B"])) if line.command == "INVITE": - print(f"received invite to {line.params[1:]}") await self.send(build("JOIN", line.params[1:])) if ( line.command == "PRIVMSG" and self.has_channel(line.params[0]) and self.has_user(line.hostmask.nickname) + and len(line.params[1].split(" ")) > 0 and not line.hostmask is None and not self.casefold(line.hostmask.nickname) == self.nickname_lower and not ("batch" in line.tags and line.tags["batch"] == "1") @@ -108,8 +99,6 @@ class Bot(BaseBot): async def main(): - bot = Bot() - params = ConnectionParams( config["botnick"], host=config["address"], @@ -117,7 +106,7 @@ async def main(): tls=config["tls"], sasl=SASLUserPass(account["username"], account["password"]), ) - + bot = Bot() await bot.add_server("tilde", params) await bot.run()