|
5 | 5 | #
|
6 | 6 |
|
7 | 7 | importargparse
|
| 8 | +importconfigparser |
8 | 9 | importsys
|
9 | 10 | importtraceback
|
| 11 | +fromtypingimportAny,Dict |
10 | 12 |
|
11 | 13 | importzulip
|
12 | 14 |
|
13 |
| -usage="""./irc-mirror.py --irc-server=IRC_SERVER --channel=<CHANNEL> --nick-prefix=<NICK> --stream=<STREAM> [optional args] |
| 15 | +usage="""./irc-mirror.py --config irc_mirror.conf |
| 16 | +""" |
14 | 17 |
|
15 |
| -Example: |
16 | 18 |
|
17 |
| -./irc-mirror.py --irc-server=127.0.0.1 --channel='#test' --nick-prefix=username --stream='test' --topic='#mypy' |
| 19 | +defread_configuration(config_file:str)->Dict[str,Dict[str,Any]]: |
| 20 | +config:configparser.ConfigParser=configparser.ConfigParser() |
| 21 | +config.read(config_file) |
18 | 22 |
|
19 |
| ---stream is a Zulip stream. |
20 |
| ---topic is a Zulip topic, is optionally specified, defaults to "IRC". |
21 |
| -Optional arguments: |
22 |
| ---nickserv-pw is a password for the nickserv. |
23 |
| ---sasl-password is a password for SASL authentication. |
| 23 | +config_irc=config["irc"] |
| 24 | +forrequiredin ["host","port","nickname","channel"]: |
| 25 | +ifrequirednotinconfig_irc: |
| 26 | +raiseException(f"Missing required configuration:{required}") |
| 27 | +config_zulip=config["api"] |
| 28 | +forrequiredin ["stream","topic"]: |
| 29 | +ifrequirednotinconfig_zulip: |
| 30 | +raiseException(f"Missing required configuration:{required}") |
24 | 31 |
|
25 |
| -Specify your Zulip API credentials and server in a ~/.zuliprc file or using the options. |
| 32 | +returnconfig_irc,config_zulip |
26 | 33 |
|
27 |
| -Note that "_zulip" will be automatically appended to the IRC nick provided |
28 |
| -""" |
29 | 34 |
|
30 | 35 | if__name__=="__main__":
|
31 | 36 | parser=zulip.add_default_arguments(
|
32 | 37 | argparse.ArgumentParser(usage=usage),allow_provisioning=True
|
33 | 38 | )
|
34 |
| -parser.add_argument("--irc-server",default=None) |
35 |
| -parser.add_argument("--port",default=6667) |
36 |
| -parser.add_argument("--nick-prefix",default=None) |
37 |
| -parser.add_argument("--channel",default=None) |
38 |
| -parser.add_argument("--stream",default="general") |
39 |
| -parser.add_argument("--topic",default="IRC") |
40 |
| -parser.add_argument("--nickserv-pw",default="") |
41 |
| -parser.add_argument("--sasl-password",default=None) |
| 39 | +parser.add_argument( |
| 40 | +"-c","--config",required=False,help="Path to the config file for the bridge." |
| 41 | + ) |
42 | 42 |
|
43 | 43 | options=parser.parse_args()
|
44 | 44 | # Setting the client to irc_mirror is critical for this to work
|
45 | 45 | options.client="irc_mirror"
|
46 |
| -zulip_client=zulip.init_from_options(options) |
| 46 | +zulip_client=zulip.Client(config_file=options.config) |
47 | 47 | try:
|
48 | 48 | fromirc_mirror_backendimportIRCBot
|
49 | 49 | exceptImportError:
|
|
54 | 54 | )
|
55 | 55 | sys.exit(1)
|
56 | 56 |
|
57 |
| -ifoptions.irc_serverisNoneoroptions.nick_prefixisNoneoroptions.channelisNone: |
58 |
| -parser.error("Missing required argument") |
| 57 | +config_irc,config_zulip=read_configuration(options.config) |
59 | 58 |
|
60 |
| -nickname=options.nick_prefix+"_zulip" |
61 | 59 | bot=IRCBot(
|
62 | 60 | zulip_client,
|
63 |
| -options.stream, |
64 |
| -options.topic, |
65 |
| -options.channel, |
66 |
| -nickname, |
67 |
| -options.irc_server, |
68 |
| -options.nickserv_pw, |
69 |
| -options.port, |
70 |
| -sasl_password=options.sasl_password, |
| 61 | +config_zulip["stream"], |
| 62 | +config_zulip["topic"], |
| 63 | +config_irc["channel"], |
| 64 | +config_irc["nickname"], |
| 65 | +config_irc["host"], |
| 66 | +config_irc.get("nickserv_password",""), |
| 67 | +int(config_irc["port"]), |
| 68 | +sasl_password=config_irc.get("sasl_password",None), |
71 | 69 | )
|
72 | 70 | bot.start()
|