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 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()