如何将 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.contentresults.rows 进行比较,我该如何存储 @ 987654325@ 转换成可以与另一个变量进行比较的变量?

【问题讨论】:

嘿,*** 并不总是最好的地方来询问诸如“我如何开始做这个项目”之类的问题。通常有 100 种关于如何实现某事的答案,而作为程序员就是知道如何实现它们。这个问题你不太可能得到很好的答案,因为它是广泛而开放的。 *** 最好的问题是那些有代码并且通常是实现某个功能的问题或问题。我知道这不是您要寻找的答案,但如果问题没有得到解答,希望这能给您一些见解 当你说Discord.js, Java, HTML是指javascript还是只是Java 既然我已经在这里了,我的帽子就值得一试了。对于该网站,您有大量不同的资源可以帮助您。 codecademy 非常适合学习静态站点开发,如果您正在寻找完整的堆栈,您可以使用 django 和 flask (python) 等框架。 Python 类似于 JS,如果您缺乏经验,可能很容易上手。你也可以用 python 编写你的不和谐机器人,并且有大量的指南可以通过谷歌快速搜索。这样一来,您的整个平台都使用一种语言,并且需要更少的设置时间才能开始运行。 @Pepe_W​​orm 我的意思是 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 resultMessageContent 进行比较后,您可以对机器人执行您想要的操作,例如将这些 Embeds 发送到频道或为用户分配角色。

如果您有任何问题,请提出,我会尝试制作视频来更好地解释这一点!

【讨论】:

以上是关于如何将 postgres 查询分配给 node.js、Discord bot 和 postgres 集成中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

先前排名为零时如何分配排名(第 2 部分)

过滤后如何将分配的属性保留给查询集对象?备择方案?

如何将 Qt 中的 SQL 查询输出模型分配给 QML 的 TableView?

如何在不使用游标的情况下一次将查询结果分配给多个变量?

NestJS Postgres Prisma - 错误类型'字符串'不可分配给参数类型'TemplateStringsArray | Sql'

使用来自 Nodejs Postgres 查询的数据 [重复]