tidy up accounts
channel key in account's json will limit that key to that channel
This commit is contained in:
parent
1e42b6d655
commit
fb60e68b3f
|
@ -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"
|
||||
}
|
||||
|
75
tooter.py
75
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()
|
||||
|
||||
|
|
Loading…
Reference in New Issue