diff options
| author | 2019-09-02 08:51:56 +0100 | |
|---|---|---|
| committer | 2019-09-02 08:51:56 +0100 | |
| commit | 9e43ea159945f0a43c3708dca9ddaadb3a69f3c4 (patch) | |
| tree | 9bd96b745b8da4ab91b6e9db6f77332df72a7896 | |
| parent | support "<nickname>: s/" sed format (diff) | |
| signature | ||
add per-user fediverse setting
| -rw-r--r-- | modules/fediverse.py | 35 | ||||
| -rw-r--r-- | src/utils/__init__.py | 9 |
2 files changed, 38 insertions, 6 deletions
diff --git a/modules/fediverse.py b/modules/fediverse.py index c2f0b8cb..5cd0ec45 100644 --- a/modules/fediverse.py +++ b/modules/fediverse.py @@ -8,17 +8,39 @@ ACTIVITY_TYPE = "application/activity+json" ACTIVITY_HEADERS = {"Accept": ("application/ld+json; " 'profile="https://www.w3.org/ns/activitystreams"')} +def _parse_username(s): + username, _, instance = s.lstrip("@").partition("@") + if username and instance: + return "@%s@%s" % (username, instance) + return None + +@utils.export("set", utils.FunctionSetting(_parse_username, "fediverse", + help="Set your fediverse account", example="@gargron@mastodon.social")) class Module(ModuleManager.BaseModule): _name = "Fedi" @utils.hook("received.command.fediverse") @utils.hook("received.command.fedi", alias_of="fediverse") - @utils.kwarg("min_args", 1) @utils.kwarg("help", "Get someone's latest toot") @utils.kwarg("usage", "@<user>@<instance>") def fedi(self, event): - full_username = event["args_split"][0].lstrip("@") - username, _, instance = full_username.partition("@") + account = None + if not event["args"]: + account = event["user"].get_setting("fediverse", None) + elif not "@" in event["args"]: + target = event["args_split"][0] + if event["server"].has_user_id(target): + target_user = event["server"].get_user(target) + account = target_user.get_setting("fediverse", None) + else: + account = event["args_split"][0] + + username = None + instance = None + if account: + account = account.lstrip("@") + username, _, instance = account.partition("@") + if not username or not instance: raise utils.EventError("Please provide @<user>@<instance>") @@ -33,12 +55,11 @@ class Module(ModuleManager.BaseModule): if webfinger_url == None: raise utils.EventError("host-meta lookup failed for %s" % instance) - webfinger_url = webfinger_url.replace("{uri}", - "acct:%s" % full_username) + webfinger_url = webfinger_url.replace("{uri}", "acct:%s" % account) webfinger = utils.http.request(webfinger_url, headers=WEBFINGER_HEADERS, - get_params={"resource": "acct:%s" % full_username}, + get_params={"resource": "acct:%s" % account}, json=True) activity_url = None @@ -61,8 +82,10 @@ class Module(ModuleManager.BaseModule): if "first" in outbox.data: if type(outbox.data["first"]) == dict: + # pleroma items = outbox.data["first"]["orderedItems"] else: + # mastodon first = utils.http.request(outbox.data["first"], headers=ACTIVITY_HEADERS, json=True) items = first.data["orderedItems"] diff --git a/src/utils/__init__.py b/src/utils/__init__.py index 6c1b90b0..cabfff31 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -344,6 +344,15 @@ class OptionsSetting(Setting): options_str = ["'%s'" % option for option in options] return "Options: %s" % ", ".join(options_str) +class FunctionSetting(Setting): + def __init__(self, func: typing.Callable[[str], bool], name: str, + help: str=None, example: str=None): + self._func = func + Setting.__init__(self, name, help, example) + + def parse(self, value: str) -> typing.Any: + return self._func(value) + class DeadlineExceededException(Exception): pass def _raise_deadline(): |
