TFAGaming / DiscordJS-V14-ModMail-Bot

A simple and advanced Discord ModMail bot.
MIT License
90 stars 79 forks source link

Make the code compatible with the latest node.js version (v19.7.0) #3

Closed viorizz closed 1 year ago

viorizz commented 1 year ago

What happend ?

I started the process by cloning the repo using git git clone https://github.com/TFAGaming/DiscordJS-V14-ModMail-Bot

Then I executed npm install to get all the necessary modules and start the bot.

But it didn't work, here what I got :

root@something:/home/discord-modmail-bot# node -v
v19.7.0
root@something:/home/discord-modmail-bot# npm install
npm ERR! code 1
npm ERR! path /home/discord-modmail-bot/node_modules/better-sqlite3
npm ERR! command failed
npm ERR! command sh -c prebuild-install || npm run build-release
npm ERR! > better-sqlite3@7.6.2 build-release
npm ERR! > node-gyp rebuild --release
npm ERR!
npm ERR! make: Entering directory '/home/discord-modmail-bot/node_modules/better-sqlite3/build'
npm ERR!   TOUCH ba23eeee118cd63e16015df367567cb043fed872.intermediate
npm ERR!   ACTION deps_sqlite3_gyp_locate_sqlite3_target_copy_builtin_sqlite3 ba23eeee118cd63e16015df367567cb043fed872.intermediate
npm ERR!   TOUCH Release/obj.target/deps/locate_sqlite3.stamp
npm ERR!   CC(target) Release/obj.target/sqlite3/gen/sqlite3/sqlite3.o
npm ERR! rm -f Release/obj.target/deps/sqlite3.a Release/obj.target/deps/sqlite3.a.ar-file-list; mkdir -p `dirname Release/obj.target/deps/sqlite3.a`
npm ERR! ar crs Release/obj.target/deps/sqlite3.a @Release/obj.target/deps/sqlite3.a.ar-file-list
npm ERR!   COPY Release/sqlite3.a
npm ERR!   CXX(target) Release/obj.target/better_sqlite3/src/better_sqlite3.o
npm ERR! rm ba23eeee118cd63e16015df367567cb043fed872.intermediate
npm ERR! make: Leaving directory '/home/discord-modmail-bot/node_modules/better-sqlite3/build'
npm ERR! prebuild-install warn install No prebuilt binaries found (target=19.7.0 runtime=node arch=x64 libc= platform=linux)
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using node-gyp@9.3.1
npm ERR! gyp info using node@19.7.0 | linux | x64
npm ERR! gyp info find Python using Python version 3.8.10 found at "/usr/bin/python3"
npm ERR! gyp http GET https://nodejs.org/download/release/v19.7.0/node-v19.7.0-headers.tar.gz
npm ERR! gyp http 200 https://nodejs.org/download/release/v19.7.0/node-v19.7.0-headers.tar.gz
npm ERR! gyp http GET https://nodejs.org/download/release/v19.7.0/SHASUMS256.txt
npm ERR! gyp http 200 https://nodejs.org/download/release/v19.7.0/SHASUMS256.txt
npm ERR! gyp info spawn /usr/bin/python3
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args   '/root/.nvm/versions/node/v19.7.0/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
npm ERR! gyp info spawn args   'binding.gyp',
npm ERR! gyp info spawn args   '-f',
npm ERR! gyp info spawn args   'make',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/home/discord-modmail-bot/node_modules/better-sqlite3/build/config.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/root/.nvm/versions/node/v19.7.0/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/root/.cache/node-gyp/19.7.0/include/node/common.gypi',
npm ERR! gyp info spawn args   '-Dlibrary=shared_library',
npm ERR! gyp info spawn args   '-Dvisibility=default',
npm ERR! gyp info spawn args   '-Dnode_root_dir=/root/.cache/node-gyp/19.7.0',
npm ERR! gyp info spawn args   '-Dnode_gyp_dir=/root/.nvm/versions/node/v19.7.0/lib/node_modules/npm/node_modules/node-gyp',
npm ERR! gyp info spawn args   '-Dnode_lib_file=/root/.cache/node-gyp/19.7.0/<(target_arch)/node.lib',
npm ERR! gyp info spawn args   '-Dmodule_root_dir=/home/discord-modmail-bot/node_modules/better-sqlite3',
npm ERR! gyp info spawn args   '-Dnode_engine=v8',
npm ERR! gyp info spawn args   '--depth=.',
npm ERR! gyp info spawn args   '--no-parallel',
npm ERR! gyp info spawn args   '--generator-output',
npm ERR! gyp info spawn args   'build',
npm ERR! gyp info spawn args   '-Goutput_dir=.'
npm ERR! gyp info spawn args ]
npm ERR! gyp info spawn make
npm ERR! gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
npm ERR! In file included from ./src/better_sqlite3.lzz:11,
npm ERR!                  from ../src/better_sqlite3.cpp:4:
npm ERR! /root/.cache/node-gyp/19.7.0/include/node/node.h:1182:51: warning: cast between incompatible function types from ‘void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, v8::Local<v8::Context>)’ to ‘node::addon_context_register_func’ {aka ‘void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, v8::Local<v8::Context>, void*)’} [-Wcast-function-type]
npm ERR!  1182 |       (node::addon_context_register_func) (regfunc),                  \
npm ERR!       |                                                   ^
npm ERR! /root/.cache/node-gyp/19.7.0/include/node/node.h:1200:3: note: in expansion of macro ‘NODE_MODULE_CONTEXT_AWARE_X’
npm ERR!  1200 |   NODE_MODULE_CONTEXT_AWARE_X(modname, regfunc, NULL, 0)
npm ERR!       |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
npm ERR! /root/.cache/node-gyp/19.7.0/include/node/node.h:1231:3: note: in expansion of macro ‘NODE_MODULE_CONTEXT_AWARE’
npm ERR!  1231 |   NODE_MODULE_CONTEXT_AWARE(NODE_GYP_MODULE_NAME,                     \
npm ERR!       |   ^~~~~~~~~~~~~~~~~~~~~~~~~
npm ERR! ./src/better_sqlite3.lzz:67:1: note: in expansion of macro ‘NODE_MODULE_INIT’
npm ERR! ./src/util/macros.lzz: In function ‘void SetPrototypeGetter(v8::Isolate*, v8::Local<v8::External>, v8::Local<v8::FunctionTemplate>, const char*, v8::AccessorGetterCallback)’:
npm ERR! ./src/util/macros.lzz:157:21: error: ‘v8::AccessorSignature’ has not been declared
npm ERR! ./src/util/binder.lzz: In static member function ‘static bool Binder::IsPlainObject(v8::Isolate*, v8::Local<v8::Object>)’:
npm ERR! ./src/util/binder.lzz:37:51: error: ‘class v8::Object’ has no member named ‘CreationContext’; did you mean ‘GetCreationContext’?
npm ERR! ./src/util/data.lzz: In function ‘v8::Local<v8::Value> Data::GetValueJS(v8::Isolate*, sqlite3_stmt*, int, bool)’:
npm ERR! ./src/util/data.lzz:73:92: warning: this statement may fall through [-Wimplicit-fallthrough=]
npm ERR! ./src/util/data.lzz:73:197: note: here
npm ERR! ./src/util/data.lzz: In function ‘v8::Local<v8::Value> Data::GetValueJS(v8::Isolate*, sqlite3_value*, bool)’:
npm ERR! ./src/util/data.lzz:77:81: warning: this statement may fall through [-Wimplicit-fallthrough=]
npm ERR! ./src/util/data.lzz:77:175: note: here
npm ERR! make: *** [better_sqlite3.target.mk:125: Release/obj.target/better_sqlite3/src/better_sqlite3.o] Error 1
npm ERR! gyp ERR! build error
npm ERR! gyp ERR! stack Error: `make` failed with exit code: 2
npm ERR! gyp ERR! stack     at ChildProcess.onExit (/root/.nvm/versions/node/v19.7.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:203:23)
npm ERR! gyp ERR! stack     at ChildProcess.emit (node:events:512:28)
npm ERR! gyp ERR! stack     at ChildProcess._handle.onexit (node:internal/child_process:293:12)
npm ERR! gyp ERR! System Linux 5.4.0-139-generic
npm ERR! gyp ERR! command "/root/.nvm/versions/node/v19.7.0/bin/node" "/root/.nvm/versions/node/v19.7.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--release"
npm ERR! gyp ERR! cwd /home/discord-modmail-bot/node_modules/better-sqlite3
npm ERR! gyp ERR! node -v v19.7.0
npm ERR! gyp ERR! node-gyp -v v9.3.1
npm ERR! gyp ERR! not ok

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2023-03-01T14_01_50_058Z-debug-0.log

How to solve the issue ?

The only solution I found was using NVM (stands for Node Version Manager) and it was to switch version to the closest that T.F.A said was working.

Which in this case is v16.9.0, so I used nvm install 16.9.0 to get the right node version.

Then I used nvm alias default 16.9.0 to be sure that it would be using the right version to install the packages.

After running npm install in the directory of my bot, it worked just fine.

So what next ?

The easiest thing for everyone, would be to have a wider range of support for latest nodejs version.

Although I can understand that the bot cannot be in every possible version of node.js so I would understand if it wasn't happening.

P.S

I'm also doing a french translation of the bot, I will create a new forked repo for it soon. Peace

TFAGaming commented 1 year ago

This is better-sqlite3 problem. The v7.0.0 is coming soon and it's going to use JSON instead of SQL (database).