Giter Site home page Giter Site logo

mayudev / revcord Goto Github PK

View Code? Open in Web Editor NEW
60.0 1.0 9.0 558 KB

A bridge for Discord and Revolt with easy setup through commands

License: MIT License

TypeScript 99.58% Dockerfile 0.42%
discord bot revolt revolt-chat revolt-bridge bridge discord-bridge

revcord's Introduction

hello there ๐Ÿ‘‹

I'm Mayu, a developer with passion for FOSS. I'm mainly interested in web development and mobile apps.

Void Linux Firefox Android Visual Studio Code

skill icons

language stats

revcord's People

Contributors

mayudev avatar nekopavel avatar raluvy95 avatar rhld16 avatar wynd avatar yochyo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

revcord's Issues

Docker method throws error

I followed the instructions on README.md for Docker exactly yet when I ran docker-compose up -d I just got the following error.

ERROR: The Compose file is invalid because:
Service revcord has neither an image nor a build context specified. At least one must be provided.

ERR_MODULE_NOT_FOUND

Hello, when using the npm start command, an error ERR_MODULE_NOT_FOUND occurs.

image

Any ideas how to fix it?

The bot cannot link to announcement channels.

Whenever I try to link a revolt channel to an announcement channel on discord, the bot tells me
"Error! Discord channel not found."
This is the case regardless of if I run the command on discord or revolt.

I can't figure out where mappings.json would be so I haven't been able to test that method of linking channels.

SyntaxError: Unexpected token '?'

Running natively on a rpi (zero 2), after installing all npm deps, running the build and creating a .env file with the appropriate vars, I get this error:

$ npm start

> [email protected] start
> node --experimental-specifier-resolution=node build/index.js

file:///home/pi/revcord/node_modules/@discordjs/rest/dist/index.mjs:1
var ne=Object.defineProperty;var ae=(n,e,t)=>e in n?ne(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var oe=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var l=(n,e,t)=>(ae(n,typeof e!="symbol"?e+"":e,t),t),Q=(n,e,t)=>{if(!e.has(n))throw TypeError("Cannot "+t)};var u=(n,e,t)=>(Q(n,e,"read from private field"),t?t.call(n):e.get(n)),L=(n,e,t)=>{if(e.has(n))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(n):e.set(n,t)},g=(n,e,t,s)=>(Q(n,e,"write to private field"),s?s.call(n,t):e.set(n,t),t);var Z=oe((we,le)=>{le.exports={name:"@discordjs/rest",version:"0.3.0",description:"The REST API for discord.js",scripts:{build:"tsup && tsc --emitDeclarationOnly --incremental",test:"jest --pass-with-no-tests --collect-coverage",lint:"prettier --check . && eslint src __tests__ --ext mjs,js,ts",format:"prettier --write . && eslint src __tests__ --ext mjs,js,ts --fix",docs:"typedoc --json docs/typedoc-out.json src/index.ts && node scripts/docs.mjs",prepublishOnly:"yarn build && yarn lint && yarn test",changelog:"git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/rest/*'"},main:"./dist/index.js",module:"./dist/index.mjs",typings:"./dist/index.d.ts",exports:{import:"./dist/index.mjs",require:"./dist/index.js"},directories:{lib:"src",test:"__tests__"},files:["dist"],contributors:["Crawl <[email protected]>","Amish Shah <[email protected]>","SpaceEEC <[email protected]>","Vlad Frangu <[email protected]>","Antonio Roman <[email protected]>"],license:"Apache-2.0",keywords:["discord","api","rest","discordapp","discordjs"],repository:{type:"git",url:"git+https://github.com/discordjs/discord.js.git"},bugs:{url:"https://github.com/discordjs/discord.js/issues"},homepage:"https://discord.js.org",dependencies:{"@discordjs/collection":"^0.4.0","@sapphire/async-queue":"^1.1.9","@sapphire/snowflake":"^3.0.1","discord-api-types":"^0.26.1","form-data":"^4.0.0","node-fetch":"^2.6.5",tslib:"^2.3.1"},devDependencies:{"@babel/core":"^7.16.12","@babel/plugin-proposal-decorators":"^7.16.7","@babel/preset-env":"^7.16.11","@babel/preset-typescript":"^7.16.7","@discordjs/ts-docgen":"^0.3.4","@types/jest":"^27.4.0","@types/node-fetch":"^2.5.10","@typescript-eslint/eslint-plugin":"^5.10.0","@typescript-eslint/parser":"^5.10.0","babel-plugin-const-enum":"^1.2.0","babel-plugin-transform-typescript-metadata":"^0.3.2",eslint:"^8.7.0","eslint-config-marine":"^9.3.2","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^4.0.0",jest:"^27.4.7",nock:"^13.2.2",prettier:"^2.5.1",tsup:"^5.11.11",typedoc:"^0.22.11",typescript:"^4.5.5"},engines:{node:">=16.9.0"},publishConfig:{access:"public"}}});import{APIVersion as ue}from"discord-api-types/v9";var V=Z(),Y=`DiscordBot (${V.homepage}, ${V.version})`,x={agent:{},api:"https://discord.com/api",cdn:"https://cdn.discordapp.com",headers:{},invalidRequestWarningInterval:0,globalRequestsPerSecond:50,offset:50,rejectOnRateLimit:null,retries:3,timeout:15e3,userAgentAppendix:`Node.js ${process.version}`,version:ue,hashSweepInterval:144e5,hashLifetime:864e5,handlerSweepInterval:36e5},j=(m=>(m.Debug="restDebug",m.InvalidRequestWarning="invalidRequestWarning",m.RateLimited="rateLimited",m.Request="request",m.Response="response",m.HashSweep="hashSweep",m.HandlerSweep="handlerSweep",m))(j||{}),ee=["webp","png","jpg","jpeg","gif"],te=["png","json"],_=[16,32,64,128,256,512,1024,2048,4096];var N=class{constructor(e=x.cdn){this.base=e}appAsset(e,t,s){return this.makeURL(`/app-assets/${e}/${t}`,s)}appIcon(e,t,s){return this.makeURL(`/app-icons/${e}/${t}`,s)}avatar(e,t,s){return this.dynamicMakeURL(`/avatars/${e}/${t}`,t,s)}banner(e,t,s){return this.dynamicMakeURL(`/banners/${e}/${t}`,t,s)}channelIcon(e,t,s){return this.makeURL(`/channel-icons/${e}/${t}`,s)}defaultAvatar(e){return this.makeURL(`/embed/avatars/${e}`)}discoverySplash(e,t,s){return this.makeURL(`/discovery-splashes/${e}/${t}`,s)}emoji(e,t){return this.makeURL(`/emojis/${e}`,{extension:t})}guildMemberAvatar(e,t,s,i){return this.dynamicMakeURL(`/guilds/${e}/users/${t}/avatars/${s}`,s,i)}icon(e,t,s){return this.dynamicMakeURL(`/icons/${e}/${t}`,t,s)}roleIcon(e,t,s){return this.makeURL(`/role-icons/${e}/${t}`,s)}splash(e,t,s){return this.makeURL(`/splashes/${e}/${t}`,s)}sticker(e,t){return this.makeURL(`/stickers/${e}`,{allowedExtensions:te,extension:t??"png"})}stickerPackBanner(e,t){return this.makeURL(`/app-assets/710982414301790216/store/${e}`,t)}teamIcon(e,t,s){return this.makeURL(`/team-icons/${e}/${t}`,s)}dynamicMakeURL(e,t,{forceStatic:s=!1,...i}={}){return this.makeURL(e,!s&&t.startsWith("a_")?{...i,extension:"gif"}:i)}makeURL(e,{allowedExtensions:t=ee,extension:s="webp",size:i}={}){if(s=String(s).toLowerCase(),!t.includes(s))throw new RangeError(`Invalid extension provided: ${s}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

SyntaxError: Unexpected token '?'
    at Loader.moduleStrategy (internal/modules/esm/translators.js:133:18)
npm ERR! code 1
npm ERR! path /home/pi/revcord
npm ERR! command failed
npm ERR! command sh -c node --experimental-specifier-resolution=node build/index.js

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/pi/.npm/_logs/2023-02-06T15_47_43_229Z-debug.log
$ cat /home/pi/.npm/_logs/2023-02-06T15_47_43_229Z-debug.log
0 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'start' ]
1 info using [email protected]
2 info using [email protected]
3 timing config:load:defaults Completed in 11ms
4 timing config:load:file:/usr/share/nodejs/npm/npmrc Completed in 12ms
5 timing config:load:builtin Completed in 12ms
6 timing config:load:cli Completed in 13ms
7 timing config:load:env Completed in 2ms
8 timing config:load:file:/home/pi/revcord/.npmrc Completed in 2ms
9 timing config:load:project Completed in 5ms
10 timing config:load:file:/home/pi/.npmrc Completed in 1ms
11 timing config:load:user Completed in 1ms
12 timing config:load:file:/etc/npmrc Completed in 0ms
13 timing config:load:global Completed in 1ms
14 timing config:load:cafile Completed in 2ms
15 timing config:load:validate Completed in 1ms
16 timing config:load:setUserAgent Completed in 3ms
17 timing config:load:setEnvs Completed in 7ms
18 timing config:load Completed in 61ms
19 verbose npm-session 6fa7f2462201e4b0
20 timing npm:load Completed in 125ms
21 timing command:run-script Completed in 1193ms
22 timing command:start Completed in 1209ms
23 verbose stack Error: command failed
23 verbose stack     at ChildProcess.<anonymous> (/usr/share/nodejs/@npmcli/promise-spawn/index.js:64:27)
23 verbose stack     at ChildProcess.emit (events.js:314:20)
23 verbose stack     at maybeClose (internal/child_process.js:1022:16)
23 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:287:5)
24 verbose pkgid [email protected]
25 verbose cwd /home/pi/revcord
26 verbose Linux 5.15.61-v8+
27 verbose argv "/usr/bin/node" "/usr/bin/npm" "start"
28 verbose node v12.22.12
29 verbose npm  v7.5.2
30 error code 1
31 error path /home/pi/revcord
32 error command failed
33 error command sh -c node --experimental-specifier-resolution=node build/index.js
34 verbose exit 1

Make a video tutorial

please make a full video tutorial i understand nothing ๐Ÿ˜ญ๐Ÿ˜ญ๐Ÿ˜ญ

Embed error !

WARN Discord Failed to translate embed.
WARN Discord TypeError: Cannot read properties of undefined (reading 'toRevolt')
WARN Discord at file:///root/revcord/build/app/discord.js:200:88
WARN Discord at Generator.next ()
WARN Discord at file:///root/revcord/build/app/discord.js:7:71
WARN Discord at new Promise ()
WARN Discord at __awaiter (file:///root/revcord/build/app/discord.js:3:12)
WARN Discord at handleDiscordMessage (file:///root/revcord/build/app/discord.js:100:12)
WARN Discord at Client. (file:///root/revcord/build/app/Bot.js:98:13)
WARN Discord at Client.emit (node:events:513:28)
WARN Discord at MessageCreateAction.handle (/root/revcord/node_modules/discord.js/src/client/actions/MessageCreate.js:28:14)
WARN Discord at Object.module.exports [as MESSAGE_CREATE] (/root/revcord/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)

Hide #0000 discriminator from webhooks

Webhooks get a discriminator of #0000 and I think they should be hidden instead, I bridged a GitHub webhook because there's no proper github webhook solution for revolt yet and this is how it looks

image

It'd be cleaner if the #0000 was not shown

DiscordAPIError: Missing Permissions

Hello,

I am running revcord in Docker. I have both bots running and signed into Discord and Revolt. The bot in Revolt is in a role that has Masquerade permissions and the bot on Discord is in a role that has "Manage Webhooks" specifically enabled.

I also used all the checkboxes when generating the invitation link.

I'm getting the following in my logs whenever I try to connect channels:


revcord_1                | ERR! Discord DiscordAPIError: Missing Permissions
revcord_1                | ERR! Discord     at RequestHandler.execute (/app/node_modules/discord.js/src/rest/RequestHandler.js:350:13)
revcord_1                | ERR! Discord     at processTicksAndRejections (node:internal/process/task_queues:96:5)
revcord_1                | ERR! Discord     at async RequestHandler.push (/app/node_modules/discord.js/src/rest/RequestHandler.js:51:14)
revcord_1                | ERR! Discord     at async TextChannel.fetchWebhooks (/app/node_modules/discord.js/src/structures/BaseGuildTextChannel.js:125:18)
revcord_1                | ERR! Discord  DiscordAPIError: Missing Permissions
revcord_1                | ERR! Discord     at RequestHandler.execute (/app/node_modules/discord.js/src/rest/RequestHandler.js:350:13)
revcord_1                | ERR! Discord     at processTicksAndRejections (node:internal/process/task_queues:96:5)
revcord_1                | ERR! Discord     at async RequestHandler.push (/app/node_modules/discord.js/src/rest/RequestHandler.js:51:14)
revcord_1                | ERR! Discord     at async TextChannel.fetchWebhooks (/app/node_modules/discord.js/src/structures/BaseGuildTextChannel.js:125:18) {
revcord_1                | ERR! Discord   method: 'get',
revcord_1                | ERR! Discord   path: '/channels/<redacted>/webhooks',
revcord_1                | ERR! Discord   code: 50013,
revcord_1                | ERR! Discord   httpStatus: 403,
revcord_1                | ERR! Discord   requestData: { json: undefined, files: [] }
revcord_1                | ERR! Discord }
revcord_1                | ERR! Discord DiscordAPIError: Missing Permissions
revcord_1                | ERR! Discord     at RequestHandler.execute (/app/node_modules/discord.js/src/rest/RequestHandler.js:350:13)
revcord_1                | ERR! Discord     at processTicksAndRejections (node:internal/process/task_queues:96:5)
revcord_1                | ERR! Discord     at async RequestHandler.push (/app/node_modules/discord.js/src/rest/RequestHandler.js:51:14)
revcord_1                | ERR! Discord     at async TextChannel.fetchWebhooks (/app/node_modules/discord.js/src/structures/BaseGuildTextChannel.js:125:18)
revcord_1                | ERR! Discord  DiscordAPIError: Missing Permissions
revcord_1                | ERR! Discord     at RequestHandler.execute (/app/node_modules/discord.js/src/rest/RequestHandler.js:350:13)
revcord_1                | ERR! Discord     at processTicksAndRejections (node:internal/process/task_queues:96:5)
revcord_1                | ERR! Discord     at async RequestHandler.push (/app/node_modules/discord.js/src/rest/RequestHandler.js:51:14)
revcord_1                | ERR! Discord     at async TextChannel.fetchWebhooks (/app/node_modules/discord.js/src/structures/BaseGuildTextChannel.js:125:18) {
revcord_1                | ERR! Discord   method: 'get',
revcord_1                | ERR! Discord   path: '/channels/<redacted>/webhooks',
revcord_1                | ERR! Discord   code: 50013,
revcord_1                | ERR! Discord   httpStatus: 403,
revcord_1                | ERR! Discord   requestData: { json: undefined, files: [] }
revcord_1                | ERR! Discord }

revolt
discord

I'm not sure what I'm doing wrong or if this is a bug. Any assistance would be appreciated.

Revolt's connect function does nothing and Discord can't find the Revolt channel.

I tried to use this on another server with 2 different bots with the same permissions. Everything is set up on Revolt, Discord, and Revcord. I am not sure why it doesn't work on this other server, but it does work fine on the first one. I tried re-using the old bots and still got the same problem. I also can't show logs because there were none listed. It just didn't do anything on Revolt and Discord says "Can't find Revolt channel".

Placing

Where do i place the .env file? like the directory?

sqlite3 and TypeError errors

This is what happens when I attempt to start on my Raspberry Pi 3B

[email protected] start
node build/index.js

ERR! db A database error occurred. If you don't know what to do, try removing the revcord.sqlite file (will reset all your settings).
ERR! db Error: Please install sqlite3 package manually
ERR! db at ConnectionManager._loadDialectModule (/home/s7002/revcord/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:55:15)
ERR! db at new ConnectionManager (/home/s7002/revcord/node_modules/sequelize/lib/dialects/sqlite/connection-manager.js:18:21)
ERR! db at new SqliteDialect (/home/s7002/revcord/node_modules/sequelize/lib/dialects/sqlite/index.js:13:30)
ERR! db at new Sequelize (/home/s7002/revcord/node_modules/sequelize/lib/sequelize.js:194:20)
ERR! db at Main. (/home/s7002/revcord/build/app/Main.js:39:31)
ERR! db at Generator.next ()
ERR! db at /home/s7002/revcord/build/app/Main.js:8:71
ERR! db at new Promise ()
ERR! db at __awaiter (/home/s7002/revcord/build/app/Main.js:4:12)
ERR! db at Main.initDb (/home/s7002/revcord/build/app/Main.js:38:16)
ERR! db Error: Please install sqlite3 package manually
ERR! db at ConnectionManager._loadDialectModule (/home/s7002/revcord/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:55:15)
ERR! db at new ConnectionManager (/home/s7002/revcord/node_modules/sequelize/lib/dialects/sqlite/connection-manager.js:18:21)
ERR! db at new SqliteDialect (/home/s7002/revcord/node_modules/sequelize/lib/dialects/sqlite/index.js:13:30)
ERR! db at new Sequelize (/home/s7002/revcord/node_modules/sequelize/lib/sequelize.js:194:20)
ERR! db at Main. (/home/s7002/revcord/build/app/Main.js:39:31)
ERR! db at Generator.next ()
ERR! db at /home/s7002/revcord/build/app/Main.js:8:71
ERR! db at new Promise ()
ERR! db at __awaiter (/home/s7002/revcord/build/app/Main.js:4:12)
ERR! db at Main.initDb (/home/s7002/revcord/build/app/Main.js:38:16)
info Revolt Logged in as Disvolt
TypeError: Cannot read properties of undefined (reading 'forEach')
at Client. (/home/s7002/revcord/build/app/Bot.js:148:34)
at Client.emit (/home/s7002/revcord/node_modules/eventemitter3/index.js:180:35)
at WebSocketClient. (/home/s7002/revcord/node_modules/revolt.js/dist/websocket/client.js:137:41)
at Generator.next ()
at /home/s7002/revcord/node_modules/revolt.js/dist/websocket/client.js:8:71
at new Promise ()
at __awaiter (/home/s7002/revcord/node_modules/revolt.js/dist/websocket/client.js:4:12)
at process (/home/s7002/revcord/node_modules/revolt.js/dist/websocket/client.js:95:41)
at WebSocketClient. (/home/s7002/revcord/node_modules/revolt.js/dist/websocket/client.js:538:23)
at Generator.next ()
info Discord Logged in as DisVolt#2900
/home/s7002/revcord/build/app/Bot.js:70
Main_1.Main.mappings.forEach((mapping) => __awaiter(this, void 0, void 0, function* () {
^

TypeError: Cannot read properties of undefined (reading 'forEach')
at Client. (/home/s7002/revcord/build/app/Bot.js:70:34)
at Object.onceWrapper (node:events:628:26)
at Client.emit (node:events:513:28)
at WebSocketManager.triggerClientReady (/home/s7002/revcord/node_modules/discord.js/src/client/websocket/WebSocketManager.js:387:17)
at WebSocketManager.checkShardsReady (/home/s7002/revcord/node_modules/discord.js/src/client/websocket/WebSocketManager.js:370:10)
at WebSocketShard. (/home/s7002/revcord/node_modules/discord.js/src/client/websocket/WebSocketManager.js:200:16)
at WebSocketShard.emit (node:events:513:28)
at WebSocketShard.checkReady (/home/s7002/revcord/node_modules/discord.js/src/client/websocket/WebSocketShard.js:181:12)
at WebSocketShard.gotGuild (/home/s7002/revcord/node_modules/discord.js/src/client/websocket/WebSocketShard.js:155:10)
at WebSocketManager. (/home/s7002/revcord/node_modules/discord.js/src/client/websocket/WebSocketManager.js:240:15)

Node.js v18.16.1

Can't build Revcord

Whenever I try to run "npm run build", I just get a message saying there were 13 errors. What does all of this mean?

app/Bot.ts:1:47 - error TS2460: Module '"discord.js"' declares 'GatewayIntentBits' locally, but it is exported as 'Snowflake'.

1 import { Client as DiscordClient, Collection, GatewayIntentBits } from "discord.js";
                                                ~~~~~~~~~~~~~~~~~

  node_modules/discord.js/typings/index.d.ts:105:3
    105   GatewayIntentBits,
          ~~~~~~~~~~~~~~~~~
    'GatewayIntentBits' is declared here.

app/Bot.ts:176:46 - error TS2551: Property 'get' does not exist on type 'Channels'. Did you mean '$get'?

176         const channel = this.revolt.channels.get(mapping.revolt);
                                                 ~~~

  node_modules/revolt.js/dist/maps/Channels.d.ts:398:5
    398     $get(id: string, data?: ChannelI): Channel;
            ~~~~
    '$get' is declared here.

app/discord.ts:276:10 - error TS2551: Property 'get' does not exist on type 'Channels'. Did you mean '$get'?

276         .get(target.revolt)
             ~~~

  node_modules/revolt.js/dist/maps/Channels.d.ts:398:5
    398     $get(id: string, data?: ChannelI): Channel;
            ~~~~
    '$get' is declared here.

app/discord.ts:343:47 - error TS2551: Property 'get' does not exist on type 'Channels'. Did you mean '$get'?

343         const channel = await revolt.channels.get(target.revolt);
                                                  ~~~

  node_modules/revolt.js/dist/maps/Channels.d.ts:398:5
    398     $get(id: string, data?: ChannelI): Channel;
            ~~~~
    '$get' is declared here.

app/discord.ts:375:47 - error TS2551: Property 'get' does not exist on type 'Channels'. Did you mean '$get'?

375         const channel = await revolt.channels.get(target.revolt);
                                                  ~~~

  node_modules/revolt.js/dist/maps/Channels.d.ts:398:5
    398     $get(id: string, data?: ChannelI): Channel;
            ~~~~
    '$get' is declared here.

app/discord/allowBots.ts:5:41 - error TS2724: '"discord.js"' has no exported member named 'PermissionFlagsBits'. Did you mean 'PermissionFlags'?

5 import { CommandInteraction, CacheType, PermissionFlagsBits } from "discord.js";
                                          ~~~~~~~~~~~~~~~~~~~

app/discord/connect.ts:4:30 - error TS2724: '"discord.js"' has no exported member named 'PermissionFlagsBits'. Did you mean 'PermissionFlags'?

4 import { CommandInteraction, PermissionFlagsBits } from "discord.js";
                               ~~~~~~~~~~~~~~~~~~~

app/discord/disconnect.ts:4:30 - error TS2724: '"discord.js"' has no exported member named 'PermissionFlagsBits'. Did you mean 'PermissionFlags'?

4 import { CommandInteraction, PermissionFlagsBits } from "discord.js";
                               ~~~~~~~~~~~~~~~~~~~

app/discord/listConnections.ts:3:44 - error TS2724: '"discord.js"' has no exported member named 'PermissionFlagsBits'. Did you mean 'PermissionFlags'?

3 import { CommandInteraction, EmbedBuilder, PermissionFlagsBits } from "discord.js";
                                             ~~~~~~~~~~~~~~~~~~~

app/revolt.ts:171:47 - error TS2551: Property 'get' does not exist on type 'Channels'. Did you mean '$get'?

171               const channel = revolt.channels.get(target.revolt);
                                                  ~~~

  node_modules/revolt.js/dist/maps/Channels.d.ts:398:5
    398     $get(id: string, data?: ChannelI): Channel;
            ~~~~
    '$get' is declared here.

app/universalExecutor.ts:32:46 - error TS2551: Property 'get' does not exist on type 'Channels'. Did you mean '$get'?

32     let revoltChannel = this.revolt.channels.get(revoltTarget);
                                                ~~~

  node_modules/revolt.js/dist/maps/Channels.d.ts:398:5
    398     $get(id: string, data?: ChannelI): Channel;
            ~~~~
    '$get' is declared here.

app/universalExecutor.ts:39:28 - error TS2339: Property 'forEach' does not exist on type 'Channels'.

39       this.revolt.channels.forEach((channel) => {
                              ~~~~~~~

app/util/permissions.ts:1:19 - error TS2724: '"discord.js"' has no exported member named 'PermissionFlagsBits'. Did you mean 'PermissionFlags'?

1 import { Channel, PermissionFlagsBits, TextChannel } from "discord.js";
                    ~~~~~~~~~~~~~~~~~~~


Found 13 errors in 9 files.

Errors  Files
     2  app/Bot.ts:1
     3  app/discord.ts:276
     1  app/discord/allowBots.ts:5
     1  app/discord/connect.ts:4
     1  app/discord/disconnect.ts:4
     1  app/discord/listConnections.ts:3
     1  app/revolt.ts:171
     2  app/universalExecutor.ts:32
     1  app/util/permissions.ts:1

Bot and bridge messages from Revolt to Discord do not send

I have connected the bots (all permissions and dependencies are set up correctly, and the version of node is compatible), and the sending of messages works well, however any message sent by a bot or by a bridge in Revolt will not send to Discord, while bot and wehooks in Discord send to Revolt.

Idea: Implement a command to let you send messages using nicknames instead of usernames

Currently, every message you send either from revolt or discord, uses the username. However, I think it'd be cool if there was a way to enable nicknames instead of usernames, something like /nicks and rc!nicks. The same would work for server profile pictures, since those with nitro on discord can change their profile picture per-server, and anyone on revcord can change their profile picture as well, but the bot uses the user profile picture and not the server one.

Can't delete messages between Revolt and Discord

I was setting up the bridge on my server, and I found that deleting a message sent by Revcord doesn't delete the original message, hence the title. If someone sends a message from Discord and I'm on Revolt, I have to switch to Discord to delete their message.

Error: Used disallowed intents

How do I fix this issue?
Terminal output:

cumbook:revcord trippysloth$ npm start

> revcord@1.1.1 start
> node build/index.js

info db Connection has been established successfully.
info Revolt Logged in as RekuBridge
/Users/trippysloth/Documents/revcord/node_modules/@discordjs/ws/dist/index.js:1066
        throw new Error("Used disallowed intents");
              ^

Error: Used disallowed intents
    at WebSocketShard.onClose (/Users/trippysloth/Documents/revcord/node_modules/@discordjs/ws/dist/index.js:1066:15)
    at WebSocket.emit (node:events:511:28)
    at WebSocket.emitClose (/Users/trippysloth/Documents/revcord/node_modules/ws/lib/websocket.js:258:10)
    at TLSSocket.socketOnClose (/Users/trippysloth/Documents/revcord/node_modules/ws/lib/websocket.js:1264:15)
    at TLSSocket.emit (node:events:523:35)
    at node:net:334:12
    at TCP.done (node:_tls_wrap:588:7)

Node.js v20.3.1
cumbook:revcord trippysloth$ ```

Emulate Username Colors on Revolt

I don't know exactly how it's possible, but on the automod bot bridge function, when you send a message on discord, the revolt bridge emulates your current role color.

Asking for Masquerade permission even when enabled.

I have connected the bots together and experimented and it seems messages from Revolt to Discord work perfectly, but Discord to Revolt doesn't send. It is asking for the bot to have the Masquerade permission, but I made a role giving it every permission including Masquerade. Was I supposed to do something differently to give this permission because the only way I knew to give the Masquerade permission was through a role.

Is Revcord supposed to transfer webhooks?

Hi, I was reading a bit the doc of discord.js, and I am not sure wether webhook messages are considered as normal messages or not. Anyway it is not clear to me: is Revcord supposed to transfer webhooks messages from Discord to Revolt or not? My Revcord is currently not doing it. And at a first quick look at discord.ts (I am new to js), I don't see why not.

[Feature Request] Copy all pre-existing messages from discord to Revolt

I'm looking to transfer my entire server and community to Revolt, and in doing so I would like to clone or copy ALL currently existing messages on discord to Revolt.

It might need to be a tool that runs for a few hours, or even days, as it would probably need to read, copy, then repost every message in a channel, or a server, one at a time with a delay to not smash into any API speed or request limits.

Either way, this is something I'd like to see, as I don't want to lose everything before the date of switching to Revolt. We already lost years of forum posts when our Web server died, and switched to discord. I really don't want to lose all my discord servers history too when switching to revcord.

Is this a feature that could be added to revcord?

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

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 }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.