tidy up accounts

channel key in account's json will limit that key to that channel
This commit is contained in:
Ben Harris 2021-02-24 15:47:20 -05:00
parent 1e42b6d655
commit fb60e68b3f
3 changed files with 40 additions and 43 deletions

8
tildeverse.json.example Normal file
View File

@ -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"
}

View File

@ -10,38 +10,35 @@ import emoji
import glob import glob
import json import json
import os import os
import re
import sys import sys
HELPTEXT = "helo i can send toots from irc: @tildeverse@tilde.zone - from @tildeteam from the #team channel)" 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 = {} masto = {}
assigned_channels = {}
# load masto creds # load masto creds
for cred in glob.glob("tilde*.json"): for cred in glob.glob("tilde*.json"):
shortname, _ = os.path.splitext(cred) shortname, _ = os.path.splitext(cred)
with open(cred, "r") as f: 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 # do setup
path = os.path.dirname(os.path.abspath(__file__)) with open("config.json", "r") as f:
with open(os.path.join(path, "config.json"), "r") as f:
config = json.load(f) config = json.load(f)
with open("account.json", "r") as f:
if os.path.isfile(os.path.join(path, "account.json")): account = json.load(f)
with open(os.path.join(path, "account.json"), "r") as f:
account = json.load(f)
channels = config["channels"] channels = config["channels"]
if len(sys.argv) > 1: if len(sys.argv) > 1:
@ -52,25 +49,20 @@ if len(sys.argv) > 1:
def think(line): def think(line):
chan = line.params[0] chan = line.params[0]
words = line.params[1].split(" ") words = line.params[1].split(" ")
cmd = words[0].lower()
if len(words) > 0: if cmd == "!source":
cmd = words[0].lower() return "https://tildegit.org/ben/tooter"
if cmd == "!toot": elif cmd in ["!botlist", "!toothelp"]:
if len(words) >= 2: return HELPTEXT
status = emoji.emojize(" ".join(words[1:]), use_aliases=True) elif cmd == "!toot":
if chan == "#team": if len(words) >= 2:
res = masto["tildeteam"].toot(status) status = emoji.emojize(" ".join(words[1:]), use_aliases=True)
elif chan == "#club": res = masto[
res = masto["tildeclub"].toot(status) assigned_channels[chan] if chan in assigned_channels else "tildeverse"
else: ].toot(status)
res = masto["tildeverse"].toot(status) return "tooted! {}".format(res["url"])
print(res) else:
return "tooted! {}".format(res["url"])
else:
return HELPTEXT
elif cmd == "!source":
return "https://tildegit.org/ben/tooter"
elif cmd in ["!botlist", "!toothelp"]:
return HELPTEXT return HELPTEXT
@ -81,18 +73,17 @@ class Server(BaseServer):
async def line_read(self, line: Line): async def line_read(self, line: Line):
print(f"{self.name} < {line.format()}") print(f"{self.name} < {line.format()}")
if line.command == "001": if line.command == "001":
print(f"connected to {self.isupport.network}")
await self.send(build("JOIN", [",".join(channels)])) await self.send(build("JOIN", [",".join(channels)]))
await self.send(build("MODE", [self.nickname, "+B"])) await self.send(build("MODE", [self.nickname, "+B"]))
if line.command == "INVITE": if line.command == "INVITE":
print(f"received invite to {line.params[1:]}")
await self.send(build("JOIN", line.params[1:])) await self.send(build("JOIN", line.params[1:]))
if ( if (
line.command == "PRIVMSG" line.command == "PRIVMSG"
and self.has_channel(line.params[0]) and self.has_channel(line.params[0])
and self.has_user(line.hostmask.nickname) and self.has_user(line.hostmask.nickname)
and len(line.params[1].split(" ")) > 0
and not line.hostmask is None and not line.hostmask is None
and not self.casefold(line.hostmask.nickname) == self.nickname_lower and not self.casefold(line.hostmask.nickname) == self.nickname_lower
and not ("batch" in line.tags and line.tags["batch"] == "1") and not ("batch" in line.tags and line.tags["batch"] == "1")
@ -108,8 +99,6 @@ class Bot(BaseBot):
async def main(): async def main():
bot = Bot()
params = ConnectionParams( params = ConnectionParams(
config["botnick"], config["botnick"],
host=config["address"], host=config["address"],
@ -117,7 +106,7 @@ async def main():
tls=config["tls"], tls=config["tls"],
sasl=SASLUserPass(account["username"], account["password"]), sasl=SASLUserPass(account["username"], account["password"]),
) )
bot = Bot()
await bot.add_server("tilde", params) await bot.add_server("tilde", params)
await bot.run() await bot.run()