mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-12-26 04:32:51 +01:00
Fediverse: Add option format.statuses.showContentWithCW
This commit is contained in:
parent
a52e7fa91b
commit
5908b86635
@ -57,8 +57,23 @@ conf.registerChannelValue(
|
||||
registry.Boolean(
|
||||
False,
|
||||
_(
|
||||
"""Determines whether the bot will output the
|
||||
profile of @username@hostname accounts it sees in channel messages."""
|
||||
"""Determines whether the bot will output the profile of
|
||||
@username@hostname accounts it sees in channel messages."""
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
conf.registerGroup(Fediverse, "format")
|
||||
conf.registerGroup(Fediverse.format, "statuses")
|
||||
|
||||
conf.registerChannelValue(
|
||||
Fediverse.format.statuses,
|
||||
"showContentWithCW",
|
||||
registry.Boolean(
|
||||
True,
|
||||
_(
|
||||
"""Determines whether the content of a status will be shown
|
||||
when the status has a Content Warning."""
|
||||
),
|
||||
),
|
||||
)
|
||||
|
@ -166,21 +166,35 @@ class Fediverse(callbacks.PluginRegexp):
|
||||
hostname = urllib.parse.urlparse(actor["id"]).hostname
|
||||
return "@%s@%s" % (actor["preferredUsername"], hostname)
|
||||
|
||||
def _format_status(self, irc, status):
|
||||
def _format_status(self, irc, msg, status):
|
||||
if status["type"] == "Create":
|
||||
return self._format_status(irc, status["object"])
|
||||
return self._format_status(irc, msg, status["object"])
|
||||
elif status["type"] == "Note":
|
||||
author_url = status["attributedTo"]
|
||||
author = self._get_actor(irc, author_url)
|
||||
cw = status.get("summary")
|
||||
if cw:
|
||||
return _("\x02%s (%s)\x02: [CW %s] %s") % (
|
||||
author["name"],
|
||||
self._format_actor_username(author),
|
||||
cw,
|
||||
utils.web.htmlToText(status["content"]),
|
||||
)
|
||||
if self.registryValue(
|
||||
"format.statuses.showContentWithCW",
|
||||
msg.channel,
|
||||
irc.network,
|
||||
):
|
||||
# show CW and content
|
||||
return _("\x02%s (%s)\x02: \x02[CW %s]\x02 %s") % (
|
||||
author["name"],
|
||||
self._format_actor_username(author),
|
||||
cw,
|
||||
utils.web.htmlToText(status["content"]),
|
||||
)
|
||||
else:
|
||||
# show CW but not content
|
||||
return _("\x02%s (%s)\x02: CW %s") % (
|
||||
author["name"],
|
||||
self._format_actor_username(author),
|
||||
cw,
|
||||
)
|
||||
else:
|
||||
# no CW, show content
|
||||
return _("\x02%s (%s)\x02: %s") % (
|
||||
author["name"],
|
||||
self._format_actor_username(author),
|
||||
@ -193,7 +207,7 @@ class Fediverse(callbacks.PluginRegexp):
|
||||
status["object"], headers={"Accept": ap.ACTIVITY_MIMETYPE}
|
||||
)
|
||||
status = json.loads(content.decode())
|
||||
return self._format_status(irc, status)
|
||||
return self._format_status(irc, msg, status)
|
||||
except ap.ActivityPubProtocolError as e:
|
||||
return "<Could not fetch status: %s>" % e.args[0]
|
||||
else:
|
||||
@ -256,7 +270,8 @@ class Fediverse(callbacks.PluginRegexp):
|
||||
return
|
||||
irc.replies(
|
||||
filter(
|
||||
bool, (self._format_status(irc, status) for status in statuses)
|
||||
bool,
|
||||
(self._format_status(irc, msg, status) for status in statuses),
|
||||
)
|
||||
)
|
||||
|
||||
@ -278,7 +293,8 @@ class Fediverse(callbacks.PluginRegexp):
|
||||
)
|
||||
irc.replies(
|
||||
filter(
|
||||
bool, (self._format_status(irc, status) for status in statuses)
|
||||
bool,
|
||||
(self._format_status(irc, msg, status) for status in statuses),
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -240,17 +240,14 @@ OUTBOX_FIRSTPAGE_VALUE = {
|
||||
},
|
||||
},
|
||||
{
|
||||
"id": "https://example.org/users/someuser/statuses/1234/activity",
|
||||
"id": "https://example.org/users/someuser/statuses/1235/activity",
|
||||
"type": "Create",
|
||||
"actor": "https://example.org/users/someuser",
|
||||
"published": "2020-05-08T01:23:45Z",
|
||||
"to": ["https://example.org/users/someuser/followers"],
|
||||
"cc": [
|
||||
"https://www.w3.org/ns/activitystreams#Public",
|
||||
"https://example.com/users/FirstAuthor",
|
||||
],
|
||||
"cc": ["https://www.w3.org/ns/activitystreams#Public"],
|
||||
"object": {
|
||||
"id": "https://example.org/users/someuser/statuses/1234",
|
||||
"id": "https://example.org/users/someuser/statuses/1235",
|
||||
"type": "Note",
|
||||
"summary": "This is a content warning",
|
||||
"attributedTo": "https://example.org/users/someuser",
|
||||
@ -378,15 +375,15 @@ class FediverseTestCase(ChannelPluginTestCase):
|
||||
@contextlib.contextmanager
|
||||
def mockRequests(self, expected_requests):
|
||||
with Manager() as m:
|
||||
expected_requests = m.list(expected_requests)
|
||||
expected_requests = m.list(list(expected_requests))
|
||||
original_getUrlContent = utils.web.getUrlContent
|
||||
|
||||
@functools.wraps(original_getUrlContent)
|
||||
def newf(url, headers={}, data=None):
|
||||
self.assertIsNone(data, "Unexpected POST")
|
||||
self.assertIsNone(data, "Unexpected POST to %s" % url)
|
||||
assert expected_requests, url
|
||||
(expected_url, response) = expected_requests.pop(0)
|
||||
self.assertEqual(url, expected_url, "Unexpected URL")
|
||||
self.assertEqual(url, expected_url, "Unexpected URL: %s" % url)
|
||||
|
||||
if isinstance(response, bytes):
|
||||
return response
|
||||
@ -572,11 +569,32 @@ class FediverseTestCase(ChannelPluginTestCase):
|
||||
"\x02someuser (@someuser@example.org)\x02: "
|
||||
+ "@ FirstAuthor I am replying to you, "
|
||||
+ "\x02someuser (@someuser@example.org)\x02: "
|
||||
+ "[CW This is a content warning] "
|
||||
+ "\x02[CW This is a content warning]\x02 "
|
||||
+ "This is a status with a content warning, and "
|
||||
+ "\x02Boosted User (@BoostedUser@example.net)\x02: "
|
||||
+ "Status Content",
|
||||
)
|
||||
|
||||
# The actors are cached from the previous request
|
||||
expected_requests = [
|
||||
(OUTBOX_URL, OUTBOX_DATA),
|
||||
(OUTBOX_FIRSTPAGE_URL, OUTBOX_FIRSTPAGE_DATA),
|
||||
(BOOSTED_URL, BOOSTED_DATA),
|
||||
]
|
||||
|
||||
with self.mockRequests(expected_requests):
|
||||
with conf.supybot.plugins.Fediverse.format.statuses.showContentWithCW.context(
|
||||
False
|
||||
):
|
||||
self.assertResponse(
|
||||
"statuses @someuser@example.org",
|
||||
"\x02someuser (@someuser@example.org)\x02: "
|
||||
+ "@ FirstAuthor I am replying to you, "
|
||||
+ "\x02someuser (@someuser@example.org)\x02: "
|
||||
+ "CW This is a content warning, and "
|
||||
+ "\x02Boosted User (@BoostedUser@example.net)\x02: "
|
||||
+ "Status Content",
|
||||
)
|
||||
|
||||
|
||||
# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:
|
||||
|
Loading…
Reference in New Issue
Block a user