Soy un desarrollador de bots de Discord y uso una base de datos SQLite para mi bot. Instalé sqlite3 por comando npm y trabajé con él, no hubo problema, pero ahora no puedo usarlo porque modifica valores. Tengo un poco de código aquí:
const ghostChannels = await new Promise((resolve, reject) => client.db.all(`SELECT * FROM "Ghosts"`, (err, rows) => err ? reject(err) : resolve(rows) ) ); ghostChannels.forEach(async (channel) => { const guildchannel = await message.member.guild.channels.cache.get( channel.id ); console.log(channel.id); console.log(guildchannel); const mess = await guildchannel.send(message.member); await mess.delete(); });Lamentablemente devuelve un error:
Uncaught TypeError TypeError: channel.send is not a function Así que miré el id y vi que no es el mismo ID que en la base de datos:
No se como solucionarlo, si alguien sabe que me lo diga :)
El problema es que intenta almacenar los copos de nieve como números enteros (por ejemplo, 988185997772738610 ), mientras que debe almacenarlos como cadenas ( "988185997772738610" ). Como estos ID tienen más de 53 bits ( MAX_SAFE_INTEGER ), JavaScript tiene dificultades para interpretarlos. Solo puede representar con seguridad números enteros entre -(2 53 - 1) y 2 53 - 1.
| Entero máximo seguro | 9007199254740992 |
| tu entero | 988185997772738610 |
| Su número entero se convierte en | 988185997772738600 |
Como puede ver, los dos últimos dígitos de cada ID de discordia/copo de nieve se convierten en 0 si se almacenan como números enteros. Incluso puedes probarlo a continuación:
console.log(988185997772738610) // => 988185997772738600 console.log('988185997772738610') // => "988185997772738610"Entonces, para resolver su problema, asegúrese de insertar las ID del canal (y otras) como cadenas en la base de datos.
¿Quizás lo haces de manera incorrecta? llamar a cualquier base de database necesita alguna gateway de enlace (no sé el nombre exacto). por ejemplo:
const ghostChannels = await new Promise((resolve, reject) => client.db.all(`SELECT * FROM "Ghosts"`, (err, rows) => err ? reject(err) : resolve(rows) ) ); ghostChannels.forEach(async (channel) => { const guildchannel = await message.member.guild.channels.cache.get( channel.id ); console.log(channel.id); console.log(guildchannel); const mess = await channel.send(message.member); await mess.delete(); }); desde que llamaste a tu guildchannel para db tu:
const mess = await channel.send(message.member);debiera ser:
const mess = await guildchannel.send(message.member);EDITAR:
He visto que guildchannel se muestra como undefined , puedes probar:
await guildchannel.channel?.sendo algo como esto:
const chan = message.guild.channels.cache.get(`${channel.id}`) chan.send("set")