discord / discord-api-docs

Official Discord API Documentation
https://discord.com/developers/docs/intro
Other
5.91k stars 1.25k forks source link

Message Reactions can be removed by spamming #2910

Closed AspectTheDev closed 3 years ago

AspectTheDev commented 3 years ago

Description

Message Reactions can be magically removed by spamming them multiple times for a few seconds.

Steps to Reproduce

Expected Behavior

The reactions should not disappear

Current Behavior

All reactions will disappear from the message completely

Screenshots/Videos

https://youtu.be/y7pfAAKQm2I

Client and System Information

Tested on the following platforms: Windows 10 (64-bit), iPhone 11 (13.3) Tested on the following builds: Desktop-84451, Desktop Canary-85615, iOS Testflight 73.0 (255527)

MomoMiles commented 3 years ago

Can confirm this issue is happening, and it affects bots' abilities to see the reactions happening.

rxdn commented 3 years ago

I can provide some further insight to this.

The reaction still exists on the API, and is shown through the /channels/:id/messages/:id/reactions/:emoji endpoint:

curl -H 'Authorization: Bot ...' https://discord.com/api/v8/channels/xxx/messages/yyy/reactions/📩
[{"id": "508391840525975553", "username": "Tickets", "avatar": "c0326f3eb3834f19d41fa1be61a99615", "discriminator": "6981", "public_flags": 65536, "bot": true}]

However, the reaction doesn't show on the get message history endpoint (/channels/:id/messages):

curl -H 'Authorization: Bot ...' https://discord.com/api/v8/channels/xxx/messages | jq
[
  {
    "id": "yyy",
    "type": 0,
    "content": "",
    "channel_id": "xxx",
    "author": {
      "id": "508391840525975553",
      "username": "Tickets",
      "avatar": "c0326f3eb3834f19d41fa1be61a99615",
      "discriminator": "6981",
      "public_flags": 65536,
      "bot": true
    },
    "attachments": [],
    "embeds": [
      {
        "type": "rich",
        "title": "Open a ticket!",
        "description": "For additional support react with letter emoji and a dedicated support chat will be opened for you!",
        "color": 3066993,
        "footer": {
          "text": "Powered by ticketsbot.net",
          "icon_url": "https://cdn.discordapp.com/avatars/508391840525975553/ac2647ffd4025009e2aa852f719a8027.png?size=256",
          "proxy_icon_url": "https://images-ext-2.discordapp.net/external/TrPxF0gTDyMzzujGvHaxzjEzb9lDrNHDfdoY-iaoVUY/%3Fsize%3D256/https/cdn.discordapp.com/avatars/508391840525975553/ac2647ffd4025009e2aa852f719a8027.png"
        }
      }
    ],
    "mentions": [],
    "mention_roles": [],
    "pinned": false,
    "mention_everyone": false,
    "tts": false,
    "timestamp": "2021-05-12T15:38:52.417000+00:00",
    "edited_timestamp": null,
    "flags": 0,
    "components": []
  },
  ...
]

Notice that the reactions field is missing from the message.

I can also confirm that spam adding and removing a reaction is the cause of this. Simply find a message with an existing reaction and spam click to add it and unadd it until your client gets ratelimited. The reaction will disappear in your client (and some weird visual behaviour will occur), and the API will no longer return the reaction.

rxdn commented 3 years ago

Further information:

It only occurs if there is 1 emoji with 1 reaction on the message it seems. If there is more than 1 type of emoji added, or if the emoji has more than 1 user reaction, it won't work. I was mistaken on this, it still happens

Additionally, spamming reactions seemingly makes your client send hundreds, or even thousands, of reaction add and delete HTTP calls. Not sure whether this is related or not.

Requests tab

jelni commented 3 years ago

Additionally, spamming reactions seemingly makes your client send hundreds, or even thousands, of reaction add and delete HTTP calls. Not sure whether this is related or not.

When the client gets a 429 response it tries to add the reaction again

night commented 3 years ago

this will be fixed in the next api deploy