-
Notifications
You must be signed in to change notification settings - Fork 184
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Support for Emoji Reactions (Replaces #1980 and #2127) #2221
Conversation
app/models/status_reaction.rb
Outdated
def set_custom_emoji | ||
self.custom_emoji = CustomEmoji.find_by(shortcode: name, domain: account.domain) if name.blank? | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doesn't make any sense to me.
I see that this comes from announcement reactions, but there it checks for if name.present?
instead.
Right now it just tries to find a custom emoji with no shortcode, when there is no name given.
Though I still have no idea what this is for.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
def set_custom_emoji | |
self.custom_emoji = CustomEmoji.find_by(shortcode: name, domain: account.domain) if name.blank? | |
end | |
def set_custom_emoji | |
self.custom_emoji = CustomEmoji.find_by(disabled: false, shortcode: name, domain: account.domain) if name.present? | |
end |
Oh I see what this is for.
This is supposed to prevent reacting with a disabled emoji and also sets custom_emoji when a custom emoji shortcode is given, but no custom_emoji object.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmmm... Once this change is applied, you can no longer react with foreign custom emoji when such a reaction already existed on the status (made by a foreign instance's user). I will revert the change for now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, yeah, because it looks for an emoji with the reactor's domain :/
It's something I unfortunately can't test for, but is the name passed as [email protected]
to this? In that case, it also should split between name and domain.
Alternatively, account.domain
could be replaced with custom_emoji.domain
, though it should have a default of nil, so it doesn't throw a NoMethodError.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
True. In fact, I've just observed incorrect behaviour happening due to account.domain being used...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
...but when removing the reaction on Mastodon, it will disappear on Akkoma as well, indicating that at least, the emoji is federated incorrectly consistently.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Honestly that confuses the hell outta me, because an emoji, which doesn't exist, should not the attached to the payload, unless I'm missing or misunderstand something.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh no... This seems to be a bigger issue with the way custom emojis work.
It is always assumed the domain of a custom emoji is the domain of the account the custom emoji was first seen in...
So that leaves 3 options:
1. Prevent being able to react with foreign emojis
2. Change how custom emojis are serialised and add domain
to the payload.
3. Leave it as it is
I'm for option 1.
Option 2 would require all other ActivityPub software to also change their serialisation to look for domain
in the tag
, otherwise they would have the same problem.
Same would go for changing content
to be [email protected]
, which no other software would currently process.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oddly, even with this change, whenever I react with my "annoying_dog" emoji, and someone else on an Akkoma instance then reacts on the same reaction, a faux "[email protected]" reaction is created (that will also never be able to go away).
Which means, this is not a bug with reactions, but intended behaviour by vanilla.
Not being able to unreact is a separate issue, which affects all custom emoji reactions.
Wait, how does the Akkoma instance react with the same emoji? It should not even display on Akkoma as reactions on toots don't and shouldn't federate.
So an [email protected]
is actually expected behaviour here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
def set_custom_emoji | |
self.custom_emoji = CustomEmoji.find_by(shortcode: name, domain: account.domain) if name.blank? | |
end | |
def set_custom_emoji | |
self.custom_emoji = CustomEmoji.find_by(disabled: false, shortcode: name, domain: custom_emoji.domain) if name.present? && custom_emoji.present? | |
end |
I actually don't think it should set a custom emoji when it is nil, as I see it as violation of the spec. Also it leads to unintended behaviour. It doesn't really matter for announcement reactions which this is based on, since they don't handle remote content, but it does matter here.
Though, as established custom_emoji.domain will essentially always equal account.domain anyway.
Actually no, when using the rest API, it is actually possible that custom_emoji.domain
is different from account.domain
0ec7fd2
to
5d0a1a7
Compare
return if original_status.nil? || | ||
!original_status.account.local? || | ||
delete_arrived_first?(@json['id']) || | ||
@account.reacted?(original_status, name) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it sufficient for reacted?
to be called with merely a name? After all, the name does not include the domain when it's a custom emoji, as it stands currently.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it is sufficient as name is saved as [email protected]
, though the content payload only contains the shortcode, so it should also check @json['tag']
for an emoji and pass [email protected]
to reacted? if the tag payload also includes a custom emoji
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The issue is, reacted?
in activity.rb does check for name as it's saved in the database... and the database never saves the domain part anywhere.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It should
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But it doesn't. My database does not contain any "emoji@domain" under the name column, only ever the shortcode.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ooooh, you're right, sorry, I misunderstood the code.
Yeah, reacted?
needs an optional emoji attribute.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wait, no, name is case sensitive and since even foreign custom emoji are always treated as coming from the reactors domain, the same account can't have two different reaction with the same name attached to a toot.
Yeah, reacted? needs an optional emoji attribute.
That would break the Undo
activity though, as it doesn't contain tags.
I don't know how other software handles Undo
though.
I missed how Undo
works. It does contain the same payload as the activity it is undoing, so it also needs to process tags.
btw this also looks for :shortcode:
in the database.
app/models/status_reaction.rb
Outdated
def set_custom_emoji | ||
self.custom_emoji = CustomEmoji.find_by(shortcode: name, domain: account.domain) if name.blank? | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
...but when removing the reaction on Mastodon, it will disappear on Akkoma as well, indicating that at least, the emoji is federated incorrectly consistently.
return if status.nil? || !status.account.local? | ||
|
||
if @account.reacted?(status, name.delete(':')) | ||
reaction = status.status_reactions.where(account: @account, name: name).first |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
reaction is nil when name
is a custom emoji shortcode, because the query looks for :shortcode:
in the database, so reactions with custom emoji are never deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
reaction = status.status_reactions.where(account: @account, name: name).first | |
reaction = status.status_reactions.where(account: @account, name: name.delete(':')).first |
facepalm
I typo'd this like 3 times now...
Though for performance, it should be name = name.delete(':')
before this block. (or name.delete! ':'
)
app/lib/activitypub/activity.rb
Outdated
# Ensure all emojis declared in the activity's tags are | ||
# present in the database and downloaded to the local cache. | ||
# Required by EmojiReact and Like for emoji reactions. | ||
def process_emoji_tags(tags) | ||
as_array(tags).each do |tag| | ||
process_single_emoji tag if tag['type'] == 'Emoji' | ||
end | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is no reason to do this.
Both Misskeys Like
activity as well as the EmojiReact
activity only expect a single tag object.
This pull request has merge conflicts that must be resolved before it can be merged. |
I made a PR with some fixes for the backend: CatCatNya#4 |
f6f60e4
to
2a13d27
Compare
This pull request has resolved merge conflicts and is ready for review. |
@Plastikmensch the following issue is outstanding from your PR: the signature of the |
346d54e
to
ab1fe56
Compare
Oops, looks like I missed that while porting changes. Sorry! |
Follow-up available at CatCatNya#5 |
46b8457
to
3dc590a
Compare
Wondering if the Ruby linting failure at undo.rb should be ignored by us, or if we can even do much about it given that's where the additional functionality is needed. |
8de90fa
to
3b3bfec
Compare
I think that cop is counterproductive and should be disabled. |
Marked as draft again as I forgot that reactions coming from e.g. Akkoma still do their weird thing |
Can you give more info on that, including what is send in the activities? |
This pull request has merge conflicts that must be resolved before it can be merged. |
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed commit of the following: commit 184f602 Author: Essem <[email protected]> Date: Thu Aug 22 12:22:36 2024 -0500 Fix grouped reaction notification text commit 4c03d85 Author: Essem <[email protected]> Date: Sun Aug 4 19:13:04 2024 -0500 Fix reblog reactions being hydrated improperly commit 8c49040 Author: Essem <[email protected]> Date: Wed Jul 24 23:10:43 2024 -0500 Fix reactions bar alignment in grouped notifications commit 13cd158 Author: Essem <[email protected]> Date: Thu Jul 18 21:01:46 2024 -0500 Add notification grouping for reactions commit e9b1a36 Author: Essem <[email protected]> Date: Tue Jun 18 14:10:37 2024 -0500 Turn custom emoji regexps into class level constants commit c925c67 Author: Essem <[email protected]> Date: Sun Jun 16 14:30:22 2024 -0500 Disable reactions in detailed status view when visibleReactions is 0 commit 7f0cee3 Author: Jeremy Kescher <[email protected]> Date: Tue May 21 00:46:17 2024 +0200 [Glitch+Emoji reactions] Use modern React context for for identity for emoji reaction code commit 917e040 Author: Essem <[email protected]> Date: Sat Feb 24 17:20:38 2024 -0600 Fix reaction picker dropdown appearance commit 907f0cd Author: Essem <[email protected]> Date: Sat Feb 24 16:22:40 2024 -0600 Merge fixes commit c197514 Author: Essem <[email protected]> Date: Fri Feb 9 17:42:19 2024 -0600 Hydrate reactions on streaming API commit 9f63402 Author: Essem <[email protected]> Date: Wed Feb 7 17:14:16 2024 -0600 Purge status reactions on account delete commit 2549ee8 Author: Essem <[email protected]> Date: Sun Jan 28 14:51:10 2024 -0600 Fix rubocop lint issue commit 0f0c4e7 Author: Essem <[email protected]> Date: Wed Jan 24 17:50:58 2024 -0600 Refactor status reactions query This was done to announcement reactions in 1b0cb3b. Might as well do it here too. commit d023a69 Author: Essem <[email protected]> Date: Tue Jan 23 22:59:42 2024 -0600 Simplify reactions API controller commit 9c73179 Author: Essem <[email protected]> Date: Thu Jan 18 21:38:39 2024 -0600 Update reaction emails Reaction icon made by [email protected] commit d845d31 Author: Essem <[email protected]> Date: Wed Jan 17 18:04:11 2024 -0600 Revert variant selector normalization Probably worth tackling later, but for now it's not worth worrying about; some other implementations (e.g. Misskey's) look to have the same behavior anyways. commit 16f0dab Author: Essem <[email protected]> Date: Sun Jan 14 15:59:27 2024 -0600 Move reaction normalization to API controller commit 6569084 Author: Essem <[email protected]> Date: Sun Jan 14 15:47:55 2024 -0600 Quick fixes commit f46571b Author: Essem <[email protected]> Date: Sat Jan 13 18:18:36 2024 -0600 Make name of like content parser function more general commit 05f1606 Author: Essem <[email protected]> Date: Sat Jan 13 18:16:57 2024 -0600 Normalize emojis with variant selectors commit 8f4ff90 Author: Essem <[email protected]> Date: Tue Dec 26 14:04:53 2023 -0600 Check for content attribute in Misskey likes commit 99428b4 Author: Essem <[email protected]> Date: Fri Dec 22 16:09:43 2023 -0600 Fix rubocop complaint commit fc22c99 Author: Essem <[email protected]> Date: Tue Dec 19 22:15:34 2023 -0600 Add reaction notification column settings This was in a previous PR. Not quite sure how it didn't carry over. commit b1014ce Author: Essem <[email protected]> Date: Mon Dec 18 18:27:02 2023 -0600 Linting fixes commit 9f5a636 Author: Essem <[email protected]> Date: Sun Nov 12 20:59:36 2023 -0600 Refactor react services commit e346a57 Author: Essem <[email protected]> Date: Fri Nov 10 17:36:40 2023 -0600 Fix reblog reactions commit c6ee433 Author: Essem <[email protected]> Date: Fri Nov 10 15:16:29 2023 -0600 Add notification emails for reactions commit 6bcd41b Author: Essem <[email protected]> Date: Tue Nov 7 18:43:47 2023 -0600 Add support for emoji reactions Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed commit of the following: commit 76d061e Author: Essem <[email protected]> Date: Thu Aug 22 12:22:36 2024 -0500 Fix grouped reaction notification text commit 40c2aec Author: Essem <[email protected]> Date: Sun Aug 4 19:13:04 2024 -0500 Fix reblog reactions being hydrated improperly commit f71caf8 Author: Essem <[email protected]> Date: Wed Jul 24 23:10:43 2024 -0500 Fix reactions bar alignment in grouped notifications commit 95ee27c Author: Essem <[email protected]> Date: Thu Jul 18 21:01:46 2024 -0500 Add notification grouping for reactions commit 130c622 Author: Essem <[email protected]> Date: Tue Jun 18 14:10:37 2024 -0500 Turn custom emoji regexps into class level constants commit d3d7577 Author: Essem <[email protected]> Date: Sun Jun 16 14:30:22 2024 -0500 Disable reactions in detailed status view when visibleReactions is 0 commit 3ca486a Author: Jeremy Kescher <[email protected]> Date: Tue May 21 00:46:17 2024 +0200 [Glitch+Emoji reactions] Use modern React context for for identity for emoji reaction code commit 38bb56a Author: Essem <[email protected]> Date: Sat Feb 24 17:20:38 2024 -0600 Fix reaction picker dropdown appearance commit c18a589 Author: Essem <[email protected]> Date: Sat Feb 24 16:22:40 2024 -0600 Merge fixes commit a48082c Author: Essem <[email protected]> Date: Fri Feb 9 17:42:19 2024 -0600 Hydrate reactions on streaming API commit 8412231 Author: Essem <[email protected]> Date: Wed Feb 7 17:14:16 2024 -0600 Purge status reactions on account delete commit 63bb117 Author: Essem <[email protected]> Date: Sun Jan 28 14:51:10 2024 -0600 Fix rubocop lint issue commit 0182d05 Author: Essem <[email protected]> Date: Wed Jan 24 17:50:58 2024 -0600 Refactor status reactions query This was done to announcement reactions in 1b0cb3b. Might as well do it here too. commit 5fbc5c6 Author: Essem <[email protected]> Date: Tue Jan 23 22:59:42 2024 -0600 Simplify reactions API controller commit 93a243c Author: Essem <[email protected]> Date: Thu Jan 18 21:38:39 2024 -0600 Update reaction emails Reaction icon made by [email protected] commit 0558d57 Author: Essem <[email protected]> Date: Wed Jan 17 18:04:11 2024 -0600 Revert variant selector normalization Probably worth tackling later, but for now it's not worth worrying about; some other implementations (e.g. Misskey's) look to have the same behavior anyways. commit 30f2807 Author: Essem <[email protected]> Date: Sun Jan 14 15:59:27 2024 -0600 Move reaction normalization to API controller commit 8fa9017 Author: Essem <[email protected]> Date: Sun Jan 14 15:47:55 2024 -0600 Quick fixes commit 8c0f4a0 Author: Essem <[email protected]> Date: Sat Jan 13 18:18:36 2024 -0600 Make name of like content parser function more general commit d46ca37 Author: Essem <[email protected]> Date: Sat Jan 13 18:16:57 2024 -0600 Normalize emojis with variant selectors commit cadd45d Author: Essem <[email protected]> Date: Tue Dec 26 14:04:53 2023 -0600 Check for content attribute in Misskey likes commit 23b8343 Author: Essem <[email protected]> Date: Fri Dec 22 16:09:43 2023 -0600 Fix rubocop complaint commit 3e095da Author: Essem <[email protected]> Date: Tue Dec 19 22:15:34 2023 -0600 Add reaction notification column settings This was in a previous PR. Not quite sure how it didn't carry over. commit b0f282a Author: Essem <[email protected]> Date: Mon Dec 18 18:27:02 2023 -0600 Linting fixes commit 81a1104 Author: Essem <[email protected]> Date: Sun Nov 12 20:59:36 2023 -0600 Refactor react services commit 5c3dac4 Author: Essem <[email protected]> Date: Fri Nov 10 17:36:40 2023 -0600 Fix reblog reactions commit 4d1f5d7 Author: Essem <[email protected]> Date: Fri Nov 10 15:16:29 2023 -0600 Add notification emails for reactions commit f02e694 Author: Essem <[email protected]> Date: Tue Nov 7 18:43:47 2023 -0600 Add support for emoji reactions Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Squashed, modified, and rebased from glitch-soc#2221. Co-authored-by: fef <[email protected]> Co-authored-by: Jeremy Kescher <[email protected]> Co-authored-by: neatchee <[email protected]> Co-authored-by: Ivan Rodriguez <[email protected]> Co-authored-by: Plastikmensch <[email protected]>
Yet another attempt.
I've gone ahead and rewrote the history a little bit to remove some of the erroneous contents some commits had when they were cherry-picked from Catstodon.
Thanks @fef1312 and @neatchee for maintaining the previous iterations of this PR.