about summary refs log tree commit diff
path: root/tooter.py
diff options
context:
space:
mode:
Diffstat (limited to 'tooter.py')
-rw-r--r--[-rwxr-xr-x]tooter.py75
1 files changed, 37 insertions, 38 deletions
diff --git a/tooter.py b/tooter.py
index 98248b5..c08c614 100755..100644
--- a/tooter.py
+++ b/tooter.py
@@ -1,44 +1,22 @@
 #!/usr/bin/env python3
 
+from mastodon import Mastodon
 import emoji
 import json
 import os
 import re
 import socket
 import sys
-from mastodon import Mastodon
-
-path = os.path.dirname(os.path.abspath(__file__))
-
-with open(os.path.join(path, "config.json")) as f:
-    config = json.load(f)
-
-botnick = config["botnick"]
-channels = config["channels"]
-if len(sys.argv) > 1:
-    for c in sys.argv[1:]:
-        channels.append("#" + c)
-
-# read masto creds
-with open(os.path.join(path, "tildeverse.json")) 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"],
-)
 
-with open(os.path.join(path, "tildeteam.json")) 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 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"]
+    )
 
 
 def rawsend(msg):
@@ -52,7 +30,7 @@ def send(chan, msg):
 
 def eventloop(chan, nick, msg):
     words = re.split("[ \t\s]+", msg)
-    if len(words) > 0 and nick != "tooter":
+    if len(words) > 0 and nick != botnick:
         if words[0] == "!toot":
             status = emoji.emojize(" ".join(words[1:]), use_aliases=True)
             print(f"{status} posted by {nick}")
@@ -65,11 +43,31 @@ def eventloop(chan, nick, msg):
         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)",
-            )
+            send(chan, "helo i can send toots from irc: @tildeverse@tilde.zone - from @tildeteam from the #team channel)")
+
+
+# do setup
+path = os.path.dirname(os.path.abspath(__file__))
+
+with open(os.path.join(path, "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)
+
+botnick = config["botnick"]
+channels = config["channels"]
+if len(sys.argv) > 1:
+    for c in sys.argv[1:]:
+        channels.append("#" + c)
+
+# read masto creds
+with open(os.path.join(path, "tildeverse.json"), "r") as f:
+    tildeverse = masto_from_json(f)
 
+with open(os.path.join(path, "tildeteam.json"), "r") as f:
+    tildeteam = masto_from_json(f)
 
 if __name__ == "__main__":
     ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -78,8 +76,7 @@ if __name__ == "__main__":
     rawsend(f"USER {botnick} 0 * :mastodon tooter")
 
     while 1:
-        ircmsg = ircsock.recv(2048).decode().split("\r\n")
-        for msg in ircmsg:
+        for msg in ircsock.recv(2048).decode().split("\r\n"):
             print(msg)
 
             if "PING" in msg:
@@ -93,6 +90,8 @@ if __name__ == "__main__":
                 for c in channels:
                     rawsend(f"JOIN {c}")
                 rawsend(f"MODE {botnick} +B")
+                if account is not None:
+                    rawsend("SQUERY NickServ IDENTIFY %s %s" % (account["username"], account["password"]))
 
             m = re.match(":(?P<nick>[^ ]+)!.*PRIVMSG #(?P<chan>\w+) :(?P<msg>.*)", msg)
             if m and m.groupdict():