如何将 postgres 查询分配给 node.js、Discord bot 和 postgres 集成中的变量?
Posted
技术标签:
【中文标题】如何将 postgres 查询分配给 node.js、Discord bot 和 postgres 集成中的变量?【英文标题】:How to assign a postgres query to a variable in node.js, Discord bot and postgres integration? 【发布时间】:2020-09-24 00:44:46 【问题描述】:我和我的朋友开始谈论创业。 我们决定使用 Discord 作为平台。 我是一名新手编码员,对以下方面有所了解:Discord.js、Java、html。
流程如下:
我们有一个可以购买订阅的网站。 购买订阅后,我们希望生成一个代码。 并使用该代码验证购买订阅的人。 生成的代码将允许此人进入服务器。 生成的代码必须由 Discord.js 机器人读取并分配角色。任何关于从哪里开始或做什么的建议都会很棒。 如果需要,我将提供一些我想使用的代码和东西。我正在努力寻找一种方法来生成代码并将其集成到 Discord.js 和 HTML 中。
(在此之后编辑...)
所以我开始这样做并遇到了 2 个问题。
bot.on('message', async message =>
if (message.author.bot) return;
if (message.channel.id === "*********************")
if (message.content === "/clear") return;
let MessageContent = message.content;
client.query(`SELECT * FROM public."GeneratedCodes" WHERE generated_codes = '$MessageContent'`)
.then(results =>
if (MessageContent === results.rows)
let msg = message.reply(`***Code worked!*** $results.rows`)
msg.then(message =>
message.delete(
timeout: 3000
)
)
else
let msg = message.reply("Code ***DIDN'T*** work :(")
msg.then(message =>
message.delete(
timeout: 3000
)
)
)
.catch(e => console.log(e))
);
所以我想进行一个查询(我已经设置了 postgresql),其中查询必须找到等于 message.content
的值,但我无法将 message.content
与 results.rows
进行比较,我该如何存储 @ 987654325@ 转换成可以与另一个变量进行比较的变量?
【问题讨论】:
嘿,*** 并不总是最好的地方来询问诸如“我如何开始做这个项目”之类的问题。通常有 100 种关于如何实现某事的答案,而作为程序员就是知道如何实现它们。这个问题你不太可能得到很好的答案,因为它是广泛而开放的。 *** 最好的问题是那些有代码并且通常是实现某个功能的问题或问题。我知道这不是您要寻找的答案,但如果问题没有得到解答,希望这能给您一些见解 当你说Discord.js, Java, HTML
是指javascript
还是只是Java
?
既然我已经在这里了,我的帽子就值得一试了。对于该网站,您有大量不同的资源可以帮助您。 codecademy 非常适合学习静态站点开发,如果您正在寻找完整的堆栈,您可以使用 django 和 flask (python) 等框架。 Python 类似于 JS,如果您缺乏经验,可能很容易上手。你也可以用 python 编写你的不和谐机器人,并且有大量的指南可以通过谷歌快速搜索。这样一来,您的整个平台都使用一种语言,并且需要更少的设置时间才能开始运行。
@Pepe_Worm 我的意思是 Java,但我也懂一点 Javascript。
Java 和 JavaScript 是两个不同的东西。如果我在这里错了,请纠正我,但我很确定上面的代码是用 JavaScript 编写的。此外,查看 babbitt 的评论,是的,您可以学习 Python 作为后端,但您也可以学习 Node.js 和 Express,这样您就不必真正学习一门新语言。两者都有效
【参考方案1】:
好吧,这真是一趟地狱般的旅程,但我想通了......
只是一个旁注,供您阅读此答案...这很棘手,因此请观看视频并询问您是否需要帮助。
所以这里是一步一步的答案:
1.首先你需要建立一个 Postgres 数据库,使用下面的链接:
https://www.youtube.com/watch?v=KH4OsSCZJUo&t
2。其次,我需要使用 .csv 文件导入随机生成的代码, 使用以下链接的网站:
https://www.randomcodegenerator.com/en/home
将 .csv 文件导入 Postgres 更容易。使用以下视频:
https://www.youtube.com/watch?v=KTcEg35Xd38
3.完成 Postgres 数据库设置后,请执行以下操作:
-首先观看此视频,了解如何使用 npm install pg
库以及如何将 node.js 连接到 Postgres 数据库:
https://youtu.be/ufdHsFClAk0
之后,您可以使用此代码引导您通过不和谐message.content
来验证插入的代码在数据库中是否有效:
bot.on('message', async message =>
let EmbedCodeMessageInvalid = new Discord.MessageEmbed()
.setColor("#00A9B7")
.setTitle("Verification Code:")
.setDescription(`$message.author.username, your code is INVALID | :)`)
.setFooter(`VirtualKicksBot | Virtualkick.co.za`, "https://cdn.shopify.com/s/files/1/0269/8146/6177/files/Mooi_large.jpg");
let EmbedCodeMessageValid = new Discord.MessageEmbed()
.setColor("#00A9B7")
.setTitle("Verification Code:")
.setDescription(`$message.author.username, your code is VALID. Welcome to the channel | :)`)
.setFooter(`VirtualKicksBot | Virtualkick.co.za`, "https://cdn.shopify.com/s/files/1/0269/8146/6177/files/Mooi_large.jpg");
if(message.author.bot) return;
if(message.channel.id === "**********************")
if(message.content === "/clear") return;
let MessageContent = message.content;
await client.query(`SELECT * FROM public."GeneratedCodes" WHERE generated_codes = $1`, [`$MessageContent`])
.then(results =>
let CodeMessage = JSON.stringify(results.rows);
let SubCodedMessage = CodeMessage.substring(21, 31)
if(MessageContent === SubCodedMessage)
let msg = message.reply( embed: EmbedCodeMessageValid )
msg.then(message =>
message.delete(timeout: 5000);
)
message.delete(timeout: 5000);
message.guild.members.cache.get(message.author.id).roles.add("713016390998687766");
else
let msg = message.reply( embed: EmbedCodeMessageInvalid );
msg.then(message =>
message.delete(timeout: 5000)
)
message.delete(timeout: 5000)
)
.catch(e => console.log(e))
);
4.我将逐段浏览代码:
~第一行是 `bot.on('message' => async message ) :
它的作用是在服务器中发送消息时调用不和谐机器人。
~第 2 到 11 行是嵌入,旨在使机器人发回的消息看起来更好一些(如果你们希望我提供有关如何执行此操作的深入教程,请发表评论,我会做的)。
~从第 12 到 14 行是 if 语句,它设置了一个条件,即满足或净代码将运行与否:
-First if: if(message.author.bot) return;
如果消息是由机器人发送的,程序将不会运行。
-Second if:if(message.channel.id === "720993727811813406")
如果您希望机器人仅在特定通道中运行此代码。
-第三个 if:if(message.content === "/clear") return;
如果您有批量删除或其他命令,如果消息中包含命令,则不会运行代码。
~第 15 行 let MessageContent = message.content;
将服务器发送的消息存储到一个变量中以供以后使用。
~第 16 行 await client.query(SELECT * FROM public."GeneratedCodes" WHERE generated_codes = $1, [$MessageContent])
这是您进行查询的地方。注意,我们要查看消息内容是否在数据库中。如果您感到困惑,请观看上面列出的有关如何使用 Postgres node.js integration
的视频。
~第 17 - 34 行:
=> 那么这个段发生的事情如下:
.then(results = CODE_IN_HERE)
,返回一个承诺,results
是用于返回 client.query
的变量,所以当你 console.log(results.rows)
时,它将返回如下:(COULOMB_NAME: 'QUERY_RESULT')
。
因此,为了能够读取和比较query result
,您应该做一个变量和JSON.stringify(VARIABLE_X)
和let VARIABLE_X_SUB = VARIABLE_X.substring(begin value, end value)
,这样您就可以将MessageContent (Which is message.content)
与query result
进行比较。
4.在您使用 IF 语句将 query result
与 MessageContent
进行比较后,您可以对机器人执行您想要的操作,例如将这些 Embeds
发送到频道或为用户分配角色。
如果您有任何问题,请提出,我会尝试制作视频来更好地解释这一点!
【讨论】:
以上是关于如何将 postgres 查询分配给 node.js、Discord bot 和 postgres 集成中的变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Qt 中的 SQL 查询输出模型分配给 QML 的 TableView?
NestJS Postgres Prisma - 错误类型'字符串'不可分配给参数类型'TemplateStringsArray | Sql'