From 1af290b954bd4239f890a0df04b8d493feb83f9c Mon Sep 17 00:00:00 2001 From: jesopo Date: Sun, 9 Sep 2018 09:06:17 +0100 Subject: Better indentation in commands.py --- modules/commands.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) (limited to 'modules') diff --git a/modules/commands.py b/modules/commands.py index 2567880b..79631a8c 100644 --- a/modules/commands.py +++ b/modules/commands.py @@ -190,14 +190,10 @@ class Module(object): event["stdout"].write("Commands: %s" % ", ".join(help_available)) def usage(self, event): + command_prefix = "" if event["is_channel"]: command_prefix = event["target"].get_setting("command-prefix", - event["server"].get_setting( - "command-prefix", - "!")) - else: - command_prefix = "" - + event["server"].get_setting("command-prefix", "!")) command = event["args_split"][0].lower() if command in self.events.on("received").on( @@ -205,9 +201,7 @@ class Module(object): hooks = self.events.on("received").on("command").on(command).get_hooks() if hooks and "usage" in hooks[0].kwargs: event["stdout"].write("Usage: %s%s %s" % (command_prefix, - command, - hooks[0].kwargs[ - "usage"])) + command, hooks[0].kwargs["usage"])) else: event["stderr"].write("No usage help available for %s" % command) else: -- cgit v1.3.1-10-gc9f91 From 7aecd2b4ca4a2dc05146c49aaa44fffdf16fa5bd Mon Sep 17 00:00:00 2001 From: dngfx Date: Sun, 9 Sep 2018 13:12:06 +0100 Subject: WOOP WOOP THAT'S THE SOUND OF LINKS FOR TWEETS --- modules/bitly.py | 3 ++- modules/tweets.py | 59 ++++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 45 insertions(+), 17 deletions(-) (limited to 'modules') diff --git a/modules/bitly.py b/modules/bitly.py index afcc1522..cd69bb4e 100644 --- a/modules/bitly.py +++ b/modules/bitly.py @@ -16,7 +16,8 @@ class Module(object): usage="") def shortlink(self, event): - url = event["url"] + url = event if type(event) is str else event["url"] + if not re.match(REGEX_URL, url): url = "http://%s" % url data = Utils.get_url(URL_BITLYSHORTEN, get_params={ diff --git a/modules/tweets.py b/modules/tweets.py index ff628b6e..93492212 100644 --- a/modules/tweets.py +++ b/modules/tweets.py @@ -1,7 +1,7 @@ -#--require-config twitter-api-key -#--require-config twitter-api-secret -#--require-config twitter-access-token -#--require-config twitter-access-secret +# --require-config twitter-api-key +# --require-config twitter-api-secret +# --require-config twitter-access-token +# --require-config twitter-access-secret import datetime, re, time, traceback import twitter @@ -10,16 +10,23 @@ import Utils REGEX_TWITTERURL = re.compile( "https?://(?:www\.)?twitter.com/[^/]+/status/(\d+)", re.I) + class Module(object): + def __init__(self, bot, events, exports): self.bot = bot + self.bitly_is_enabled = "bitly" in self.bot.modules.modules + events.on("received").on("command").on("tweet", "tw" - ).hook(self.tweet, help="Find a tweet", - usage="[@username/URL/ID]") + ).hook(self.tweet, + help="Find a tweet", + usage="[@username/URL/ID]") def make_timestamp(self, s): - seconds_since = time.time()-datetime.datetime.strptime(s, - "%a %b %d %H:%M:%S %z %Y").timestamp() + seconds_since = time.time() - datetime.datetime.strptime(s, + "%a %b %d " + "%H:%M:%S %z " + "%Y").timestamp() since, unit = Utils.time_unit(seconds_since) return "%s %s ago" % (since, unit) @@ -56,21 +63,41 @@ class Module(object): traceback.print_exc() tweet = None if tweet: + linked_id = tweet["id"] username = "@%s" % tweet["user"]["screen_name"] + + bitly_link = "" + if self.bitly_is_enabled: + bitly = self.bot.modules.modules["bitly"] + chopped_uname = username[1:] + tweet_link = "https://twitter.com/%s/status/%s" % ( + chopped_uname, linked_id) + + bitly_link = " -- " + bitly.shortlink(tweet_link) + if "retweeted_status" in tweet: original_username = "@%s" % tweet["retweeted_status" - ]["user"]["screen_name"] + ]["user"]["screen_name"] original_text = tweet["retweeted_status"]["text"] retweet_timestamp = self.make_timestamp(tweet[ - "created_at"]) + "created_at"]) original_timestamp = self.make_timestamp(tweet[ - "retweeted_status"]["created_at"]) - event["stdout"].write("(%s (%s) retweeted %s (%s)) %s" % ( - username, retweet_timestamp, - original_username, original_timestamp, original_text)) + "retweeted_status"][ + "created_at"]) + event["stdout"].write( + "(%s (%s) retweeted %s (%s)) %s %s" % ( + username, retweet_timestamp, + original_username, original_timestamp, + original_text, + bitly_link)) else: - event["stdout"].write("(%s, %s) %s" % (username, - self.make_timestamp(tweet["created_at"]), tweet["text"])) + event["stdout"].write("(%s, %s) %s %s" % (username, + self.make_timestamp( + tweet[ + "created_at"]), + tweet["text"], + bitly_link) + ) else: event["stderr"].write("Invalid tweet identifiers provided") else: -- cgit v1.3.1-10-gc9f91 From 2d4dbf922f98f5b454e77c0bf8d16aa0ea65310f Mon Sep 17 00:00:00 2001 From: dngfx Date: Sun, 9 Sep 2018 13:20:59 +0100 Subject: h8 everything right now --- modules/bitly.py | 2 +- modules/tweets.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'modules') diff --git a/modules/bitly.py b/modules/bitly.py index cd69bb4e..7736a8c5 100644 --- a/modules/bitly.py +++ b/modules/bitly.py @@ -16,7 +16,7 @@ class Module(object): usage="") def shortlink(self, event): - url = event if type(event) is str else event["url"] + url = event["url"] if not re.match(REGEX_URL, url): url = "http://%s" % url diff --git a/modules/tweets.py b/modules/tweets.py index 93492212..72358899 100644 --- a/modules/tweets.py +++ b/modules/tweets.py @@ -16,6 +16,7 @@ class Module(object): def __init__(self, bot, events, exports): self.bot = bot self.bitly_is_enabled = "bitly" in self.bot.modules.modules + self.events = events events.on("received").on("command").on("tweet", "tw" ).hook(self.tweet, @@ -68,12 +69,12 @@ class Module(object): bitly_link = "" if self.bitly_is_enabled: - bitly = self.bot.modules.modules["bitly"] chopped_uname = username[1:] tweet_link = "https://twitter.com/%s/status/%s" % ( chopped_uname, linked_id) - bitly_link = " -- " + bitly.shortlink(tweet_link) + bitly_link = " -- " + self.events.call("get.shortlink", + url=tweet_link) if "retweeted_status" in tweet: original_username = "@%s" % tweet["retweeted_status" -- cgit v1.3.1-10-gc9f91 From a5ff20fca32b73a6f403be98547fd47f785ba12b Mon Sep 17 00:00:00 2001 From: dngfx Date: Sun, 9 Sep 2018 13:34:32 +0100 Subject: i dun fixed it! --- modules/tweets.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'modules') diff --git a/modules/tweets.py b/modules/tweets.py index 72358899..8b0ebd76 100644 --- a/modules/tweets.py +++ b/modules/tweets.py @@ -73,8 +73,9 @@ class Module(object): tweet_link = "https://twitter.com/%s/status/%s" % ( chopped_uname, linked_id) - bitly_link = " -- " + self.events.call("get.shortlink", - url=tweet_link) + bitly_link = " -- " + self.events.on("get").on( + "shortlink").call( + url=tweet_link)[0] if "retweeted_status" in tweet: original_username = "@%s" % tweet["retweeted_status" -- cgit v1.3.1-10-gc9f91 From 561dcdf799a54d4c9c5aa58b7b58452ae3ad1a56 Mon Sep 17 00:00:00 2001 From: jesopo Date: Sun, 9 Sep 2018 09:26:56 +0100 Subject: Switch set.py to use delimited events --- modules/set.py | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) (limited to 'modules') diff --git a/modules/set.py b/modules/set.py index a389cc8b..a9a677ae 100644 --- a/modules/set.py +++ b/modules/set.py @@ -5,25 +5,22 @@ class Module(object): self.bot = bot self.exports = exports - events.on("received").on("command").on("set").hook( - self.set, help="Set a specified user setting", - usage=" ") - events.on("received").on("command").on("get").hook( - self.get, help="Get a specified user setting", - usage="", min_args=1) + events.on("received.command.set").hook(self.set, + usage=" ", help="Set a specified user setting") + events.on("received.command.get").hook(self.get, min_args=1, + usage="", help="Get a specified user setting") - events.on("received").on("command").on("channelset" - ).hook(self.channel_set, channel_only=True, - help="Set a specified setting for the current channel", - usage=" ", require_mode="o") - events.on("received").on("command").on("channelsetoverride" - ).hook(self.channel_set, channel_only=True, - help="Set a specified setting for the current channel", - usage=" ", permission="channelsetoverride") - events.on("received").on("command").on("channelget" - ).hook(self.channel_get, channel_only=True, - help="Get a specified setting for the current channel", - usage="", min_args=1, require_mode="o") + events.on("received.command.channelset").hook(self.channel_set, + channel_only=True, usage=" ", require_mode="o", + help="Set a specified setting for the current channel") + events.on("received.command.channelsetoverride").hook( + self.channel_set, channel_only=True, usage=" ", + permission="channelsetoverride", + help="Set a specified setting for the current channel") + events.on("received.command.channelget").hook(self.channel_get, + channel_only=True, usage="", min_args=1, + require_mode="o", help="Get a specified setting for the current " + "channel") def _set(self, settings, event, target): settings_dict = dict([(setting["setting"], setting -- cgit v1.3.1-10-gc9f91 From 87ff49c4d259d653c19b4e6e25c07024ee8cd95c Mon Sep 17 00:00:00 2001 From: jesopo Date: Sun, 9 Sep 2018 09:34:55 +0100 Subject: Add !serverset and !serverget --- modules/commands.py | 8 +++++--- modules/set.py | 24 +++++++++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) (limited to 'modules') diff --git a/modules/commands.py b/modules/commands.py index 79631a8c..21b0f361 100644 --- a/modules/commands.py +++ b/modules/commands.py @@ -64,13 +64,15 @@ class Module(object): help="Unignore commands from a given user", usage="", permission="unignore") - exports.add("channelset", {"setting": "command-prefix", - "help": "Set the command prefix used in this channel"}) - events.on("new").on("user", "channel").hook(self.new) events.on("send").on("stdout").hook(self.send_stdout) events.on("send").on("stderr").hook(self.send_stderr) + exports.add("channelset", {"setting": "command-prefix", + "help": "Set the command prefix used in this channel"}) + exports.add("serverset", {"setting": "identity-mechanism", + "help": "Set the identity mechanism for this server"}) + def new(self, event): if "user" in event: target = event["user"] diff --git a/modules/set.py b/modules/set.py index a9a677ae..6735b34a 100644 --- a/modules/set.py +++ b/modules/set.py @@ -22,6 +22,13 @@ class Module(object): require_mode="o", help="Get a specified setting for the current " "channel") + events.on("received.command.serverset").hook(self.server_set, + usage=" ", permission="serverset", + help="Set a specified setting for the current server") + events.on("received.command.serverget").hook(self.server_get, + usage="", min_args=1, permission="serverget", + help="Get a specified setting for the current server") + def _set(self, settings, event, target): settings_dict = dict([(setting["setting"], setting ) for setting in settings]) @@ -47,8 +54,10 @@ class Module(object): self._set(self.exports.get_all("set"), event, event["user"]) def channel_set(self, event): - self._set(self.exports.get_all("channelset"), event, - event["target"]) + self._set(self.exports.get_all("channelset"), event, event["target"]) + + def server_set(self, event): + self._set(self.exports.get_all("serverset"), event, event["server"]) def _get(self, event, setting, qualifier, value): if not value == None: @@ -57,12 +66,17 @@ class Module(object): else: event["stdout"].write("'%s' has no value set" % setting) + def get(self, event): + setting = event["args_split"][0] + self._get(event, setting, "", event["user"].get_setting( + setting, None)) + def channel_get(self, event): setting = event["args_split"][0] self._get(event, setting, " for %s" % event["target"].name, event["target"].get_setting(setting, None)) - def get(self, event): + def server_get(self, event): setting = event["args_split"][0] - self._get(event, setting, "", event["user"].get_setting( - setting, None)) + self._get(event, setting, " for %s" % event["server"].name, + event["server"].get_setting(setting, None)) -- cgit v1.3.1-10-gc9f91 From c3ebb321110ab121d4d898e7b3ba15b238bd2415 Mon Sep 17 00:00:00 2001 From: jesopo Date: Sun, 9 Sep 2018 09:38:35 +0100 Subject: Don't add a qualifier for server settings --- modules/set.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'modules') diff --git a/modules/set.py b/modules/set.py index 6735b34a..86cbe6bf 100644 --- a/modules/set.py +++ b/modules/set.py @@ -78,5 +78,5 @@ class Module(object): def server_get(self, event): setting = event["args_split"][0] - self._get(event, setting, " for %s" % event["server"].name, - event["server"].get_setting(setting, None)) + self._get(event, setting, "", event["server"].get_setting( + setting, None)) -- cgit v1.3.1-10-gc9f91 From 2fa7d9b8a9b378cb1aa326b89cd02c79a616ee98 Mon Sep 17 00:00:00 2001 From: jesopo Date: Sun, 9 Sep 2018 10:04:21 +0100 Subject: Add nickserv-password and sasl to !serverset --- modules/nickserv.py | 16 +++++----------- modules/sasl.py | 8 ++++++++ 2 files changed, 13 insertions(+), 11 deletions(-) (limited to 'modules') diff --git a/modules/nickserv.py b/modules/nickserv.py index 5b7e9087..b4aeb938 100644 --- a/modules/nickserv.py +++ b/modules/nickserv.py @@ -3,12 +3,11 @@ import EventManager class Module(object): def __init__(self, bot, events, exports): - events.on("received").on("numeric").on("001" - ).hook(self.on_connect, priority=EventManager.PRIORITY_URGENT) - events.on("received").on("command").on("setnickserv" - ).hook(self.set_nickserv, min_args=1, permission="setnickserv", - help="Set bot's nickserv password", usage="", - private_only=True) + events.on("received").on("numeric").on("001").hook(self.on_connect, + priority=EventManager.PRIORITY_URGENT) + + exports.add("serverset", {"setting": "nickserv-password", + "help": "Set the nickserv password for this server"}) def on_connect(self, event): nickserv_password = event["server"].get_setting( @@ -17,8 +16,3 @@ class Module(object): event["server"].attempted_auth = True event["server"].send_message("nickserv", "identify %s" % nickserv_password) - - def set_nickserv(self, event): - nickserv_password = event["args"] - event["server"].set_setting("nickserv-password", nickserv_password) - event["stdout"].write("Nickserv password saved") diff --git a/modules/sasl.py b/modules/sasl.py index 32e20137..dee74133 100644 --- a/modules/sasl.py +++ b/modules/sasl.py @@ -8,6 +8,14 @@ class Module(object): events.on("received.authenticate").hook(self.on_authenticate) events.on("received.numeric.903").hook(self.sasl_success) + exports.add("serverset", {"setting": "sasl", + "help": "Set the sasl username/password for this server", + "validate": self._validate}) + + def _validate(self, s): + if " " in s: + return s.split(" ", 1) + def on_cap(self, event): has_sasl = "sasl" in event["capabilities"] has_mechanisms = has_sasl and not event["capabilities"]["sasl" -- cgit v1.3.1-10-gc9f91 From 8959b6cfd24233c07f5a3195d5ae09b866f924d0 Mon Sep 17 00:00:00 2001 From: jesopo Date: Sun, 9 Sep 2018 10:17:22 +0100 Subject: Utilise !serverset in more modules --- modules/accept_invite.py | 6 +++++- modules/check_urls.py | 3 +++ modules/commands.py | 2 ++ modules/ctcp.py | 4 ++++ 4 files changed, 14 insertions(+), 1 deletion(-) (limited to 'modules') diff --git a/modules/accept_invite.py b/modules/accept_invite.py index 671b76f4..6dd476e1 100644 --- a/modules/accept_invite.py +++ b/modules/accept_invite.py @@ -1,10 +1,14 @@ - +import Utils class Module(object): def __init__(self, bot, events, exports): events.on("received").on("invite").hook(self.on_invite) + exports.add("serverset", {"setting": "accept-invites", + "help": "Set whether I accept invites on this server", + "validate": Utils.bool_or_none}) def on_invite(self, event): if event["server"].is_own_nickname(event["target_user"].nickname): if event["server"].get_setting("accept-invites", True): event["server"].send_join(event["target_channel"]) + diff --git a/modules/check_urls.py b/modules/check_urls.py index e53437b7..221f548d 100644 --- a/modules/check_urls.py +++ b/modules/check_urls.py @@ -15,6 +15,9 @@ class Module(object): exports.add("channelset", {"setting": "check-urls", "help": "Enable/Disable automatically checking for " "malicious URLs", "validate": Utils.bool_or_none}) + exports.add("serverset", {"setting": "check-urls", + "help": "Enable/Disable automatically checking for " + "malicious URLs", "validate": Utils.bool_or_none}) exports.add("channelset", {"setting": "check-urls-kick", "help": "Enable/Disable automatically kicking users that " "send malicious URLs", "validate": Utils.bool_or_none}) diff --git a/modules/commands.py b/modules/commands.py index 21b0f361..a500c75d 100644 --- a/modules/commands.py +++ b/modules/commands.py @@ -70,6 +70,8 @@ class Module(object): exports.add("channelset", {"setting": "command-prefix", "help": "Set the command prefix used in this channel"}) + exports.add("serverset", {"setting": "command-prefix", + "help": "Set the command prefix used on this server"}) exports.add("serverset", {"setting": "identity-mechanism", "help": "Set the identity mechanism for this server"}) diff --git a/modules/ctcp.py b/modules/ctcp.py index e6d7ad8f..1a009d1d 100644 --- a/modules/ctcp.py +++ b/modules/ctcp.py @@ -1,10 +1,14 @@ import datetime +import Utils class Module(object): def __init__(self, bot, events, exports): self.bot = bot events.on("received").on("message").on("private").hook( self.private_message) + exports.add("serverset", {"setting": "ctcp-responses", + "help": "Set whether I respond to CTCPs on this server", + "validate": Utils.bool_or_none}) def private_message(self, event): if event["message"][0] == "\x01" and event["message"][-1] == "\x01": -- cgit v1.3.1-10-gc9f91 From 931c941f427b574578bc947c03c8b311268e31b1 Mon Sep 17 00:00:00 2001 From: dngfx Date: Sun, 9 Sep 2018 15:35:32 +0100 Subject: Fix spacing. --- modules/bitly.py | 1 - 1 file changed, 1 deletion(-) (limited to 'modules') diff --git a/modules/bitly.py b/modules/bitly.py index 7736a8c5..afcc1522 100644 --- a/modules/bitly.py +++ b/modules/bitly.py @@ -17,7 +17,6 @@ class Module(object): def shortlink(self, event): url = event["url"] - if not re.match(REGEX_URL, url): url = "http://%s" % url data = Utils.get_url(URL_BITLYSHORTEN, get_params={ -- cgit v1.3.1-10-gc9f91 From 23fbc2cb952811f7bc7cf3fe91d0102363ac7eb5 Mon Sep 17 00:00:00 2001 From: dngfx Date: Sun, 9 Sep 2018 15:37:44 +0100 Subject: Make URL shortening generic in tweets.py --- modules/tweets.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'modules') diff --git a/modules/tweets.py b/modules/tweets.py index 8b0ebd76..bd097664 100644 --- a/modules/tweets.py +++ b/modules/tweets.py @@ -15,7 +15,7 @@ class Module(object): def __init__(self, bot, events, exports): self.bot = bot - self.bitly_is_enabled = "bitly" in self.bot.modules.modules + self.url_shortener_enabled = "bitly" in self.bot.modules.modules self.events = events events.on("received").on("command").on("tweet", "tw" @@ -67,13 +67,13 @@ class Module(object): linked_id = tweet["id"] username = "@%s" % tweet["user"]["screen_name"] - bitly_link = "" - if self.bitly_is_enabled: + url_shortener_link = "" + if self.url_shortener_enabled: chopped_uname = username[1:] tweet_link = "https://twitter.com/%s/status/%s" % ( chopped_uname, linked_id) - bitly_link = " -- " + self.events.on("get").on( + url_shortener_link = " -- " + self.events.on("get").on( "shortlink").call( url=tweet_link)[0] @@ -91,14 +91,14 @@ class Module(object): username, retweet_timestamp, original_username, original_timestamp, original_text, - bitly_link)) + url_shortener_link)) else: event["stdout"].write("(%s, %s) %s %s" % (username, self.make_timestamp( tweet[ "created_at"]), tweet["text"], - bitly_link) + url_shortener_link) ) else: event["stderr"].write("Invalid tweet identifiers provided") -- cgit v1.3.1-10-gc9f91 From a9e49fd36bb519e2257e812bd1fa109c32d3e8e3 Mon Sep 17 00:00:00 2001 From: dngfx Date: Sun, 9 Sep 2018 15:50:05 +0100 Subject: Fix up tweets.py --- modules/tweets.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'modules') diff --git a/modules/tweets.py b/modules/tweets.py index bd097664..76f99d05 100644 --- a/modules/tweets.py +++ b/modules/tweets.py @@ -15,7 +15,6 @@ class Module(object): def __init__(self, bot, events, exports): self.bot = bot - self.url_shortener_enabled = "bitly" in self.bot.modules.modules self.events = events events.on("received").on("command").on("tweet", "tw" @@ -67,16 +66,19 @@ class Module(object): linked_id = tweet["id"] username = "@%s" % tweet["user"]["screen_name"] - url_shortener_link = "" - if self.url_shortener_enabled: - chopped_uname = username[1:] - tweet_link = "https://twitter.com/%s/status/%s" % ( + url_shortener_link = False + chopped_uname = username[1:] + tweet_link = "https://twitter.com/%s/status/%s" % ( chopped_uname, linked_id) - url_shortener_link = " -- " + self.events.on("get").on( + url_shortener_link = self.events.on("get").on( "shortlink").call( url=tweet_link)[0] + url_shortener_link = "" if url_shortener_link == False else \ + "-- " + url_shortener_link + + if "retweeted_status" in tweet: original_username = "@%s" % tweet["retweeted_status" ]["user"]["screen_name"] @@ -93,12 +95,13 @@ class Module(object): original_text, url_shortener_link)) else: - event["stdout"].write("(%s, %s) %s %s" % (username, - self.make_timestamp( - tweet[ - "created_at"]), - tweet["text"], - url_shortener_link) + event["stdout"].write("(%s, %s) %s %s" % + (username, + self.make_timestamp( + tweet["created_at"] + ), + tweet["text"], + url_shortener_link) ) else: event["stderr"].write("Invalid tweet identifiers provided") -- cgit v1.3.1-10-gc9f91