mirror-bot.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # -*- coding: utf-8 -*-
  2. import signal
  3. import irc
  4. import argparse
  5. # parse arguments
  6. parser = argparse.ArgumentParser(description='IRC bot to mirror msgs from a server to another')
  7. parser.add_argument('--server-from',default='127.0.0.1', help='First IRC server')
  8. parser.add_argument('--port-from', default=22024, type=int, help='port of the first IRC server')
  9. parser.add_argument('--server-to',default='127.0.0.1', help='Second IRC server')
  10. parser.add_argument('--port-to', default=22028, type=int, help='port of the second IRC server')
  11. parser.add_argument('--channels',
  12. default=["#dev", "#memes", "#philosophy", "#markets", "#math", "#random", "#test"],
  13. nargs='+', help='channels to join')
  14. parser.add_argument('--nickname', default="mirror-bot", help='bot nickname in IRC')
  15. args = parser.parse_args()
  16. botnick = args.nickname
  17. ## Server 1
  18. darkirc_server = args.server_from
  19. darkirc_port = args.port_from
  20. darkirc_channels = args.channels
  21. darkirc = irc.IRC()
  22. darkirc.connect(darkirc_server, darkirc_port, darkirc_channels, botnick)
  23. ## Server 2
  24. ircd_server = args.server_to
  25. ircd_port = args.port_to
  26. ircd_channels = args.channels
  27. ircd = irc.IRC()
  28. ircd.connect(ircd_server, ircd_port, ircd_channels, botnick)
  29. def signal_handler(sig, frame):
  30. print("Caught termination signal, cleaning up and exiting...")
  31. ircd.disconnect(args.server_to, args.port_to)
  32. darkirc.disconnect(args.server_from, args.port_from)
  33. print("Shut down successfully")
  34. exit(0)
  35. signal.signal(signal.SIGINT, signal_handler)
  36. while True:
  37. darkirc_text = darkirc.get_response()
  38. if not len(darkirc_text.strip()) > 0:
  39. print("Error: disconnected from server")
  40. exit(-1)
  41. print(darkirc_text)
  42. text_list = darkirc_text.split(' ')
  43. command = text_list[1]
  44. nick_handle = text_list[0]
  45. if command == "PRIVMSG":
  46. nickname = nick_handle[nick_handle.find(':')+1 : nick_handle.find('!')]
  47. channel = text_list[2]
  48. msg = ' '.join(text_list[3:])
  49. message = msg[msg.find(':')+1:].rstrip()
  50. ircd.send(channel, f"<{nickname}>: {message}")