Skip to content

Commit b9d55b8

Browse files
committed
IRC: Convert configuration from CLI args to config file.
1 parent ad9b0e6 commit b9d55b8

File tree

2 files changed

+46
-31
lines changed

2 files changed

+46
-31
lines changed

Diff for: zulip/integrations/bridge_with_irc/irc-mirror.py

+29-31
Original file line numberDiff line numberDiff line change
@@ -5,45 +5,45 @@
55
#
66

77
import argparse
8+
import configparser
89
import sys
910
import traceback
11+
from typing import Any, Dict
1012

1113
import zulip
1214

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+
"""
1417

15-
Example:
1618

17-
./irc-mirror.py --irc-server=127.0.0.1 --channel='#test' --nick-prefix=username --stream='test' --topic='#mypy'
19+
def read_configuration(config_file: str) -> Dict[str, Dict[str, Any]]:
20+
config: configparser.ConfigParser = configparser.ConfigParser()
21+
config.read(config_file)
1822

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+
for required in ["host", "port", "nickname", "channel"]:
25+
if required not in config_irc:
26+
raise Exception(f"Missing required configuration: {required}")
27+
config_zulip = config["api"]
28+
for required in ["stream", "topic"]:
29+
if required not in config_zulip:
30+
raise Exception(f"Missing required configuration: {required}")
2431

25-
Specify your Zulip API credentials and server in a ~/.zuliprc file or using the options.
32+
return config_irc, config_zulip
2633

27-
Note that "_zulip" will be automatically appended to the IRC nick provided
28-
"""
2934

3035
if __name__ == "__main__":
3136
parser = zulip.add_default_arguments(
3237
argparse.ArgumentParser(usage=usage), allow_provisioning=True
3338
)
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+
)
4242

4343
options = parser.parse_args()
4444
# Setting the client to irc_mirror is critical for this to work
4545
options.client = "irc_mirror"
46-
zulip_client = zulip.init_from_options(options)
46+
zulip_client = zulip.Client(config_file=options.config)
4747
try:
4848
from irc_mirror_backend import IRCBot
4949
except ImportError:
@@ -54,19 +54,17 @@
5454
)
5555
sys.exit(1)
5656

57-
if options.irc_server is None or options.nick_prefix is None or options.channel is None:
58-
parser.error("Missing required argument")
57+
config_irc, config_zulip = read_configuration(options.config)
5958

60-
nickname = options.nick_prefix + "_zulip"
6159
bot = IRCBot(
6260
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),
7169
)
7270
bot.start()

Diff for: zulip/integrations/bridge_with_irc/irc_mirror.conf

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[irc]
2+
host = irc.libera.chat
3+
port = 6667
4+
channel = #test
5+
nickname = bridge
6+
# (Optional) Password for the nickserv
7+
# nickserv_password = password
8+
# (Optional) Password for SASL authentication
9+
# sasl_password = password
10+
11+
# This is for Zulip configuration
12+
[api]
13+
14+
key = aPiKeY
15+
site = https://chat.zulip.org
16+
stream = test here
17+
topic = IRC

0 commit comments

Comments
 (0)