Jelajahi Sumber

bin/darkirc: add mirror-bot script

Dastan-glitch 3 tahun lalu
induk
melakukan
8203ce633e
1 mengubah file dengan 53 tambahan dan 0 penghapusan
  1. 53 0
      bin/darkirc/script/bots/mirror-bot.py

+ 53 - 0
bin/darkirc/script/bots/mirror-bot.py

@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+
+import irc
+import argparse
+
+# parse arguments
+parser = argparse.ArgumentParser(description='IRC bot to mirror msgs from a server to another')
+parser.add_argument('--server-from',default='127.0.0.1', help='First IRC server')
+parser.add_argument('--port-from', default=22024, type=int, help='port of the first IRC server')
+parser.add_argument('--server-to',default='127.0.0.1', help='Second IRC server')
+parser.add_argument('--port-to', default=22028, type=int, help='port of the second IRC server')
+parser.add_argument('--channels', 
+                    default=["#dev", "#memes", "#philosophy", "#markets", "#math", "#random", "#test"], 
+                    nargs='+', help='channels to join')
+parser.add_argument('--nickname', default="mirror-bot", help='bot nickname in IRC')
+
+args = parser.parse_args()
+
+botnick = args.nickname
+
+## Server 1
+darkirc_server = args.server_from
+darkirc_port = args.port_from
+darkirc_channels = args.darkircls
+
+darkirc = irc.IRC()
+darkirc.connect(darkirc_server, darkirc_port, darkirc_channels, botnick)
+
+## Server 2
+ircd_server = args.server_to
+ircd_port = args.port_to
+ircd_channels = args.channels
+
+ircd = irc.IRC()
+ircd.connect(ircd_server, ircd_port, ircd_channels, botnick)
+
+while True:
+    darkirc_text = darkirc.get_response()
+    if not len(darkirc_text) > 0:
+        continue
+    
+    print(darkirc_text)
+    text_list = darkirc_text.split(' ')
+    command = text_list[1]
+    nick_handle = text_list[0]
+
+    if command == "PRIVMSG":
+        nickname = nick_handle[nick_handle.find(':')+1 : nick_handle.find('!')]
+        channel = text_list[2]
+        msg = ' '.join(text_list[3:])
+        message = msg[msg.find(':')+1:].rstrip()
+        
+        ircd.send(channel, f"<{nickname}>: {message}")