From eda932ec06c1b4b275569b4e7dadb9384a3859eb Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Wed, 29 May 2019 21:03:12 -0400 Subject: init --- tooter.py | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100755 tooter.py (limited to 'tooter.py') diff --git a/tooter.py b/tooter.py new file mode 100755 index 0000000..66b1afc --- /dev/null +++ b/tooter.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python3 + +import emoji +import json +import os +import re +import socket +import sys +from mastodon import Mastodon + +server = ("127.0.0.1", 6667) +channels = ["#bots", "#meta", "#team"] +if len(sys.argv) > 1: + for c in sys.argv[1:]: + channels.append("#" + c) +botnick = "tooter" + +# read masto creds +path = os.path.dirname(os.path.abspath(__file__)) +tildeverse_file = os.path.join(path, "tildeverse.json") +with open(tildeverse_file) as f: + tildeverse_config = json.load(f) + +tildeverse = Mastodon( + client_id=tildeverse_config["client_id"], + client_secret=tildeverse_config["client_secret"], + access_token=tildeverse_config["access_token"], + api_base_url=tildeverse_config["base_url"], +) + +tildeteam_file = os.path.join(path, "tildeteam.json") +with open(tildeteam_file) as f: + tildeteam_config = json.load(f) + +tildeteam = Mastodon( + client_id=tildeteam_config["client_id"], + client_secret=tildeteam_config["client_secret"], + access_token=tildeteam_config["access_token"], + api_base_url=tildeteam_config["base_url"], +) + + +def rawsend(msg): + print(msg) + ircsock.send(f"{msg}\r\n".encode()) + + +def send(chan, msg): + rawsend(f"PRIVMSG #{chan} :{msg}") + + +def eventloop(chan, nick, msg): + words = re.split("[ \t\s]+", msg) + if len(words) > 0 and nick != "tooter": + if words[0] == "!toot": + status = emoji.emojize(words[2:], use_aliases=True) + if chan == "#team": + res = tildeteam.toot(status) + else: + res = tildeverse.toot(status) + send(chan, f"tooted! {res.url}") + elif words[0] == "!source": + send(chan, "https://tildegit.org/ben/tooter") + elif words[0] == "!botlist" or words[0] == "!toothelp": + send( + chan, + "helo i can send toots from irc: https://tilde.zone/~tildeverse - (https://tilde.zone/~tildeteam from the #team channel)", + ) + + +if __name__ == "__main__": + ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + ircsock.connect(server) + rawsend(f"NICK {botnick}") + rawsend(f"USER {botnick} 0 * :mastodon tooter") + + while 1: + ircmsg = ircsock.recv(2048).decode().split("\r\n") + for msg in ircmsg: + print(msg) + + if "PING" in msg: + rawsend(msg.replace("I", "O", 1)) + + if "INVITE" in msg: + chan = msg.split(":")[-1] + rawsend(f"JOIN {chan}") + + if "001" in msg: + for c in channels: + rawsend(f"JOIN {c}") + rawsend(f"MODE {botnick} +B") + + m = re.match(":(?P[^ ]+)!.*PRIVMSG #(?P\w+) :(?P.*)", msg) + if m and m.groupdict(): + m = m.groupdict() + try: + eventloop(m["chan"], m["nick"], m["msg"]) + except Exception as e: + print("ERROR" + str(m)) + print(e) -- cgit 1.4.1