mayudev / revcord

A bridge for Discord and Revolt with easy setup through commands
MIT License
64 stars 9 forks source link

The bridge does not check for whether any field character limits on Revolt were surpassed #14

Closed raymand211092 closed 1 year ago

raymand211092 commented 1 year ago

WARN Revolt Couldn't send a message to Revolt WARN Revolt Error: Request failed with status code 400 WARN Revolt at createError (/root/revcord/node_modules/revolt-api/node_modules/axios/lib/core/createError.js:16:15) WARN Revolt at settle (/root/revcord/node_modules/revolt-api/node_modules/axios/lib/core/settle.js:17:12) WARN Revolt at IncomingMessage.handleStreamEnd (/root/revcord/node_modules/revolt-api/node_modules/axios/lib/adapters/http.js:322:11) WARN Revolt at IncomingMessage.emit (node:events:525:35) WARN Revolt at endReadableNT (node:internal/streams/readable:1359:12) WARN Revolt at process.processTicksAndRejections (node:internal/process/task_queues:82:21) WARN Revolt Error: Request failed with status code 400 WARN Revolt at createError (/root/revcord/node_modules/revolt-api/node_modules/axios/lib/core/createError.js:16:15) WARN Revolt at settle (/root/revcord/node_modules/revolt-api/node_modules/axios/lib/core/settle.js:17:12) WARN Revolt at IncomingMessage.handleStreamEnd (/root/revcord/node_modules/revolt-api/node_modules/axios/lib/adapters/http.js:322:11) WARN Revolt at IncomingMessage.emit (node:events:525:35) WARN Revolt at endReadableNT (node:internal/streams/readable:1359:12) WARN Revolt at process.processTicksAndRejections (node:internal/process/task_queues:82:21) { WARN Revolt config: { WARN Revolt transitional: { WARN Revolt silentJSONParsing: true, WARN Revolt forcedJSONParsing: true, WARN Revolt clarifyTimeoutError: false WARN Revolt }, WARN Revolt adapter: [Function: httpAdapter], WARN Revolt transformRequest: [ [Function: transformRequest] ], WARN Revolt transformResponse: [ [Function: transformResponse] ], WARN Revolt timeout: 0, WARN Revolt xsrfCookieName: 'XSRF-TOKEN', WARN Revolt xsrfHeaderName: 'X-XSRF-TOKEN', WARN Revolt maxContentLength: -1, WARN Revolt maxBodyLength: -1, WARN Revolt validateStatus: [Function: validateStatus], WARN Revolt headers: { WARN Revolt Accept: 'application/json, text/plain, /', WARN Revolt 'Content-Type': 'application/json', WARN Revolt 'X-Bot-Token': '---', WARN Revolt 'User-Agent': 'axios/0.26.1', WARN Revolt 'Content-Length': 444 WARN Revolt }, WARN Revolt method: 'post', WARN Revolt data: '{"nonce":"01H3Q95RS95J9RC6MT989Z0QWC","content":"pos no\n(<@499999480557600768>)\n","masquerade":{"name":"RayManD-R#0000","avatar":"https://cdn.discordapp.com/avatars/1053073987632123905/a7afda79114bf1eea998e387c677c657.webp"},"replies":[],"embeds":[{"title":"raymand1992","icon_url":"http://152.206.177.43:8008/_matrix/media/v3/thumbnail/mx.grupotd.nat.cu/TjHNTuqQWIPZuTmnudCbVQjV?width=128&height=128&method=scale","description":"😃\\n\\n"}]}', WARN Revolt baseURL: 'https://api.revolt.chat', WARN Revolt url: '/channels/01H3FB301PJ31Y13X2ST1HFV0D/messages' WARN Revolt }, WARN Revolt request: <ref 1> ClientRequest { WARN Revolt _events: [Object: null prototype] { WARN Revolt abort: [Function (anonymous)], WARN Revolt aborted: [Function (anonymous)], WARN Revolt connect: [Function (anonymous)], WARN Revolt error: [Function (anonymous)], WARN Revolt socket: [Function (anonymous)], WARN Revolt timeout: [Function (anonymous)], WARN Revolt finish: [Function: requestOnFinish] WARN Revolt }, WARN Revolt _eventsCount: 7, WARN Revolt _maxListeners: undefined, WARN Revolt outputData: [], WARN Revolt outputSize: 0, WARN Revolt writable: true, WARN Revolt destroyed: true, WARN Revolt _last: false, WARN Revolt chunkedEncoding: false, WARN Revolt shouldKeepAlive: true, WARN Revolt maxRequestsOnConnectionReached: false, WARN Revolt _defaultKeepAlive: true, WARN Revolt useChunkedEncodingByDefault: true, WARN Revolt sendDate: false, WARN Revolt _removedConnection: false, WARN Revolt _removedContLen: false, WARN Revolt _removedTE: false, WARN Revolt strictContentLength: false, WARN Revolt _contentLength: 444, WARN Revolt _hasBody: true, WARN Revolt _trailer: '', WARN Revolt finished: true, WARN Revolt _headerSent: true, WARN Revolt _closed: true, WARN Revolt socket: TLSSocket { WARN Revolt _tlsOptions: [Object], WARN Revolt _secureEstablished: true, WARN Revolt _securePending: false, WARN Revolt _newSessionPending: false, WARN Revolt _controlReleased: true, WARN Revolt secureConnecting: false, WARN Revolt _SNICallback: null, WARN Revolt servername: 'api.revolt.chat', WARN Revolt alpnProtocol: false, WARN Revolt authorized: true, WARN Revolt authorizationError: null, WARN Revolt encrypted: true, WARN Revolt _events: [Object: null prototype], WARN Revolt _eventsCount: 9, WARN Revolt connecting: false, WARN Revolt _hadError: false, WARN Revolt _parent: null, WARN Revolt _host: 'api.revolt.chat', WARN Revolt _closeAfterHandlingError: false, WARN Revolt _readableState: [ReadableState], WARN Revolt _maxListeners: undefined, WARN Revolt _writableState: [WritableState], WARN Revolt allowHalfOpen: false, WARN Revolt _sockname: null, WARN Revolt _pendingData: null, WARN Revolt _pendingEncoding: '', WARN Revolt server: undefined, WARN Revolt _server: null, WARN Revolt ssl: [TLSWrap], WARN Revolt _requestCert: true, WARN Revolt _rejectUnauthorized: true, WARN Revolt timeout: 5000, WARN Revolt parser: null, WARN Revolt _httpMessage: null, WARN Revolt [Symbol(res)]: [TLSWrap], WARN Revolt [Symbol(verified)]: true, WARN Revolt [Symbol(pendingSession)]: null, WARN Revolt [Symbol(async_id_symbol)]: -1, WARN Revolt [Symbol(kHandle)]: [TLSWrap], WARN Revolt [Symbol(lastWriteQueueSize)]: 0, WARN Revolt [Symbol(timeout)]: Timeout { WARN Revolt _idleTimeout: 5000, WARN Revolt _idlePrev: [TimersList], WARN Revolt _idleNext: [TimersList], WARN Revolt _idleStart: 349441, WARN Revolt _onTimeout: [Function: bound ], WARN Revolt _timerArgs: undefined, WARN Revolt _repeat: null, WARN Revolt _destroyed: false, WARN Revolt [Symbol(refed)]: false, WARN Revolt [Symbol(kHasPrimitive)]: false, WARN Revolt [Symbol(asyncId)]: 469, WARN Revolt [Symbol(triggerId)]: 467 WARN Revolt }, WARN Revolt [Symbol(kBuffer)]: null, WARN Revolt [Symbol(kBufferCb)]: null, WARN Revolt [Symbol(kBufferGen)]: null, WARN Revolt [Symbol(kCapture)]: false, WARN Revolt [Symbol(kSetNoDelay)]: false, WARN Revolt [Symbol(kSetKeepAlive)]: true, WARN Revolt [Symbol(kSetKeepAliveInitialDelay)]: 1, WARN Revolt [Symbol(kBytesRead)]: 0, WARN Revolt [Symbol(kBytesWritten)]: 0, WARN Revolt [Symbol(connect-options)]: [Object] WARN Revolt }, WARN Revolt _header: 'POST /channels/01H3FB301PJ31Y13X2ST1HFV0D/messages HTTP/1.1\r\n' + WARN Revolt 'Accept: application/json, text/plain, /\r\n' + WARN Revolt 'Content-Type: application/json\r\n' + WARN Revolt 'X-Bot-Token: ---' + WARN Revolt 'User-Agent: axios/0.26.1\r\n' + WARN Revolt 'Content-Length: 444\r\n' + WARN Revolt 'Host: api.revolt.chat\r\n' + WARN Revolt 'Connection: keep-alive\r\n' + WARN Revolt '\r\n', WARN Revolt _keepAliveTimeout: 0, WARN Revolt _onPendingData: [Function: nop], WARN Revolt agent: Agent { WARN Revolt _events: [Object: null prototype], WARN Revolt _eventsCount: 2, WARN Revolt _maxListeners: undefined, WARN Revolt defaultPort: 443, WARN Revolt protocol: 'https:', WARN Revolt options: [Object: null prototype], WARN Revolt requests: [Object: null prototype] {}, WARN Revolt sockets: [Object: null prototype] {}, WARN Revolt freeSockets: [Object: null prototype], WARN Revolt keepAliveMsecs: 1000, WARN Revolt keepAlive: true, WARN Revolt maxSockets: Infinity, WARN Revolt maxFreeSockets: 256, WARN Revolt scheduling: 'lifo', WARN Revolt maxTotalSockets: Infinity, WARN Revolt totalSocketCount: 1, WARN Revolt maxCachedSessions: 100, WARN Revolt _sessionCache: [Object], WARN Revolt [Symbol(kCapture)]: false WARN Revolt }, WARN Revolt socketPath: undefined, WARN Revolt method: 'POST', WARN Revolt maxHeaderSize: undefined, WARN Revolt insecureHTTPParser: undefined, WARN Revolt joinDuplicateHeaders: undefined, WARN Revolt path: '/channels/01H3FB301PJ31Y13X2ST1HFV0D/messages', WARN Revolt _ended: true, WARN Revolt res: IncomingMessage { WARN Revolt _readableState: [ReadableState], WARN Revolt _events: [Object: null prototype], WARN Revolt _eventsCount: 4, WARN Revolt _maxListeners: undefined, WARN Revolt socket: null, WARN Revolt httpVersionMajor: 1, WARN Revolt httpVersionMinor: 1, WARN Revolt httpVersion: '1.1', WARN Revolt complete: true, WARN Revolt rawHeaders: [Array], WARN Revolt rawTrailers: [], WARN Revolt joinDuplicateHeaders: undefined, WARN Revolt aborted: false, WARN Revolt upgrade: false, WARN Revolt url: '', WARN Revolt method: null, WARN Revolt statusCode: 400, WARN Revolt statusMessage: 'Bad Request', WARN Revolt client: [TLSSocket], WARN Revolt _consuming: false, WARN Revolt _dumped: false, WARN Revolt req: [Circular 1], WARN Revolt responseUrl: 'https://api.revolt.chat/channels/01H3FB301PJ31Y13X2ST1HFV0D/messages', WARN Revolt redirects: [], WARN Revolt [Symbol(kCapture)]: false, WARN Revolt [Symbol(kHeaders)]: [Object], WARN Revolt [Symbol(kHeadersCount)]: 34, WARN Revolt [Symbol(kTrailers)]: null, WARN Revolt [Symbol(kTrailersCount)]: 0 WARN Revolt }, WARN Revolt aborted: false, WARN Revolt timeoutCb: null, WARN Revolt upgradeOrConnect: false, WARN Revolt parser: null, WARN Revolt maxHeadersCount: null, WARN Revolt reusedSocket: false, WARN Revolt host: 'api.revolt.chat', WARN Revolt protocol: 'https:', WARN Revolt _redirectable: Writable { WARN Revolt _writableState: [WritableState], WARN Revolt _events: [Object: null prototype], WARN Revolt _eventsCount: 3, WARN Revolt _maxListeners: undefined, WARN Revolt _options: [Object], WARN Revolt _ended: true, WARN Revolt _ending: true, WARN Revolt _redirectCount: 0, WARN Revolt _redirects: [], WARN Revolt _requestBodyLength: 444, WARN Revolt _requestBodyBuffers: [], WARN Revolt _onNativeResponse: [Function (anonymous)], WARN Revolt _currentRequest: [Circular 1], WARN Revolt _currentUrl: 'https://api.revolt.chat/channels/01H3FB301PJ31Y13X2ST1HFV0D/messages', WARN Revolt [Symbol(kCapture)]: false WARN Revolt }, WARN Revolt [Symbol(kCapture)]: false, WARN Revolt [Symbol(kBytesWritten)]: 0, WARN Revolt [Symbol(kNeedDrain)]: false, WARN Revolt [Symbol(corked)]: 0, WARN Revolt [Symbol(kOutHeaders)]: [Object: null prototype] { WARN Revolt accept: [Array], WARN Revolt 'content-type': [Array], WARN Revolt 'x-bot-token': [Array], WARN Revolt 'user-agent': [Array], WARN Revolt 'content-length': [Array], WARN Revolt host: [Array] WARN Revolt }, WARN Revolt [Symbol(errored)]: null, WARN Revolt [Symbol(kHighWaterMark)]: 16384, WARN Revolt [Symbol(kUniqueHeaders)]: null WARN Revolt }, WARN Revolt response: { WARN Revolt status: 400, WARN Revolt statusText: 'Bad Request', WARN Revolt headers: { WARN Revolt date: 'Sat, 24 Jun 2023 18:03:04 GMT', WARN Revolt 'content-type': 'application/json', WARN Revolt 'content-length': '27', WARN Revolt connection: 'keep-alive', WARN Revolt 'alt-svc': 'h3=":443"; ma=86400', WARN Revolt 'permissions-policy': 'interest-cohort=()', WARN Revolt 'x-content-type-options': 'nosniff', WARN Revolt 'x-frame-options': 'SAMEORIGIN', WARN Revolt 'x-ratelimit-bucket': '14188872126600363078', WARN Revolt 'x-ratelimit-limit': '10', WARN Revolt 'x-ratelimit-remaining': '9', WARN Revolt 'x-ratelimit-reset-after': '10000', WARN Revolt 'cf-cache-status': 'DYNAMIC', WARN Revolt 'report-to': '{"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=xbcPEt1uYVYQOsdhsPXvaTKXsSUSiXR6QeK2RYXHOnd3VY1MBYB8BUQFbmacZSEDJoHPmHTf5W7wBZoF7aPOSaA6d5qMfCbcrHXwbIroThfNbrKmZDb%2FR3scFowXWy%2Fy%2FT4%3D"}],"group":"cf-nel","max_age":604800}', WARN Revolt nel: '{"success_fraction":0,"report_to":"cf-nel","max_age":604800}', WARN Revolt server: 'cloudflare', WARN Revolt 'cf-ray': '7dc6e2a77f1d8dd0-MIA' WARN Revolt }, WARN Revolt config: { WARN Revolt transitional: [Object], WARN Revolt adapter: [Function: httpAdapter], WARN Revolt transformRequest: [Array], WARN Revolt transformResponse: [Array], WARN Revolt timeout: 0, WARN Revolt xsrfCookieName: 'XSRF-TOKEN', WARN Revolt xsrfHeaderName: 'X-XSRF-TOKEN', WARN Revolt maxContentLength: -1, WARN Revolt maxBodyLength: -1, WARN Revolt validateStatus: [Function: validateStatus], WARN Revolt headers: [Object], WARN Revolt method: 'post', WARN Revolt data: '{"nonce":"01H3Q95RS95J9RC6MT989Z0QWC","content":"pos no\n(<@499999480557600768>)\n","masquerade":{"name":"RayManD-R#0000","avatar":"https://cdn.discordapp.com/avatars/1053073987632123905/a7afda79114bf1eea998e387c677c657.webp"},"replies":[],"embeds":[{"title":"raymand1992","icon_url":"http://152.206.177.43:8008/_matrix/media/v3/thumbnail/mx.grupotd.nat.cu/TjHNTuqQWIPZuTmnudCbVQjV?width=128&height=128&method=scale","description":"😃\\n\\n"}]}', WARN Revolt baseURL: 'https://api.revolt.chat', WARN Revolt url: '/channels/01H3FB301PJ31Y13X2ST1HFV0D/messages' WARN Revolt }, WARN Revolt request: <ref 1> ClientRequest { WARN Revolt _events: [Object: null prototype], WARN Revolt _eventsCount: 7, WARN Revolt _maxListeners: undefined, WARN Revolt outputData: [], WARN Revolt outputSize: 0, WARN Revolt writable: true, WARN Revolt destroyed: true, WARN Revolt _last: false, WARN Revolt chunkedEncoding: false, WARN Revolt shouldKeepAlive: true, WARN Revolt maxRequestsOnConnectionReached: false, WARN Revolt _defaultKeepAlive: true, WARN Revolt useChunkedEncodingByDefault: true, WARN Revolt sendDate: false, WARN Revolt _removedConnection: false, WARN Revolt _removedContLen: false, WARN Revolt _removedTE: false, WARN Revolt strictContentLength: false, WARN Revolt _contentLength: 444, WARN Revolt _hasBody: true, WARN Revolt _trailer: '', WARN Revolt finished: true, WARN Revolt _headerSent: true, WARN Revolt _closed: true, WARN Revolt socket: [TLSSocket], WARN Revolt _header: 'POST /channels/01H3FB301PJ31Y13X2ST1HFV0D/messages HTTP/1.1\r\n' + WARN Revolt 'Accept: application/json, text/plain, /\r\n' + WARN Revolt 'Content-Type: application/json\r\n' + WARN Revolt 'X-Bot-Token: '---' + WARN Revolt 'User-Agent: axios/0.26.1\r\n' + WARN Revolt 'Content-Length: 444\r\n' + WARN Revolt 'Host: api.revolt.chat\r\n' + WARN Revolt 'Connection: keep-alive\r\n' + WARN Revolt '\r\n', WARN Revolt _keepAliveTimeout: 0, WARN Revolt _onPendingData: [Function: nop], WARN Revolt agent: [Agent], WARN Revolt socketPath: undefined, WARN Revolt method: 'POST', WARN Revolt maxHeaderSize: undefined, WARN Revolt insecureHTTPParser: undefined, WARN Revolt joinDuplicateHeaders: undefined, WARN Revolt path: '/channels/01H3FB301PJ31Y13X2ST1HFV0D/messages', WARN Revolt _ended: true, WARN Revolt res: [IncomingMessage], WARN Revolt aborted: false, WARN Revolt timeoutCb: null, WARN Revolt upgradeOrConnect: false, WARN Revolt parser: null, WARN Revolt maxHeadersCount: null, WARN Revolt reusedSocket: false, WARN Revolt host: 'api.revolt.chat', WARN Revolt protocol: 'https:', WARN Revolt _redirectable: [Writable], WARN Revolt [Symbol(kCapture)]: false, WARN Revolt [Symbol(kBytesWritten)]: 0, WARN Revolt [Symbol(kNeedDrain)]: false, WARN Revolt [Symbol(corked)]: 0, WARN Revolt [Symbol(kOutHeaders)]: [Object: null prototype], WARN Revolt [Symbol(errored)]: null, WARN Revolt [Symbol(kHighWaterMark)]: 16384, WARN Revolt [Symbol(kUniqueHeaders)]: null WARN Revolt }, WARN Revolt data: { type: 'FailedValidation' } WARN Revolt }, WARN Revolt isAxiosError: true, WARN Revolt toJSON: [Function: toJSON] WARN Revolt }

mayudev commented 1 year ago

@raymand211092 it seems the logs contained the bot's token. ive deleted it, but i suggest you regenerate it since someone could use it to get into your server.

Anyway, it seems there are some validation rules on revolt that aren't checked on revcords side, so I think it would be a good idea to implement those

zicklag commented 1 year ago

I just found yesterday that a one particular user's messages from Discord keep won't go through to Revolt, and just keep returning 400 errors.

Let me know if there's anything I can do to help or if you've got any tips or ideas of what's causing it and how I might be able to work around.

Interestingly it's only happening with the one user, and the rest, so far, seem to be working fine.

zicklag commented 1 year ago

Ah, I found out the issue in my case. The user in question had a 32 character username, that was getting sent in addition to the #0 suffix for the Discord ID. This made the masquerade username length 34, which surpasses the 32 character limit set here:

https://github.com/revoltchat/backend/blob/49035f48178c452f59f0fe4cfd00ca924bd0272a/crates/quark/src/models/channels/message.rs#L87

I think the bridge could safely truncate usernames that are too long?

Edit: Nevermind, I just needed to update revcord, sorry for the noise.

mayudev commented 1 year ago

Should be fixed by #22

MattTheTekie commented 11 months ago

@mayudev I'm having a issue where sending a spotify link only from the revolt side crashes the bot. https://open.spotify.com/track/0uMd4X8y6FyCjgQpONwoVa?si=2f27f94209ed43c9

mayudev commented 11 months ago

@mayudev I'm having a issue where sending a spotify link only from the revolt side crashes the bot. https://open.spotify.com/track/0uMd4X8y6FyCjgQpONwoVa?si=2f27f94209ed43c9

I can't seem to be able to reproduce this issue. Please make sure you're on the latest version

MattTheTekie commented 11 months ago

@mayudev I'm having a issue where sending a spotify link only from the revolt side crashes the bot. https://open.spotify.com/track/0uMd4X8y6FyCjgQpONwoVa?si=2f27f94209ed43c9

I can't seem to be able to reproduce this issue. Please make sure you're on the latest version

I am on the latest version. It turns out it was due to VPS issues and the issue is no longer reproducible.