Awesome IRC bot
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
2.1 KiB

#!/usr/bin/env python3
from contextlib import closing
from msgbus.client import MsgbusSubClient
import argparse
from time import sleep
from json import dumps
def main():
parser = argparse.ArgumentParser(description="send irc art")
parser.add_argument("-i", "--host", default="127.0.0.1", help="host to connect to")
parser.add_argument("-p", "--port", default=7003, help="port to connect to")
parser.add_argument("-c", "--channel", required=True, help="irc channel")
parser.add_argument("-f", "--file", required=True, help="file containing irc lines to send")
parser.add_argument("--delay", type=float, default=1.0, help="delay between lines (s)")
parser.add_argument("--names", default=["default"], nargs="+", help="bot pubsub names to send via")
parser.add_argument("--name-burst", default=1, type=int, help="num lines to send before choosing next name")
parser.add_argument("--name-burst-delay", default=0.0, type=float, help="delay between single name bursts")
parser.add_argument("--name-change-delay", type=float, default=0.0)
args = parser.parse_args()
with open(args.file) as f:
with closing(MsgbusSubClient(args.host, args.port)) as client:
name = 0
per_name = 0
for line in f:
line = line.rstrip()
print(line)
client.pub("pyircbot_send", "{} privmsg {}".format(args.names[name], dumps([args.channel, line])))
per_name += 1
# if the current name has reached its quota
if per_name >= args.name_burst:
# Do the main sleep
sleep(args.delay)
per_name = 0
# Advance to the next name
name += 1
if name >= len(args.names):
name = 0
if args.name_change_delay:
sleep(args.name_change_delay)
else:
# Same name, do the burst delay
if args.name_burst_delay:
sleep(args.name_burst_delay)
if __name__ == '__main__':
main()