Javascript 您可以通过用户在discord.js中的输入定义变量名吗?

Javascript 您可以通过用户在discord.js中的输入定义变量名吗?,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,因此,我有一个命令,根据用户键入的内容显示变量。 例如,如果用户想知道(在我的代码中)用户将编写的“版主”计划!计划版主和它将要做的是打印版主的计划,方法是:message.channel.send(${plan}${args[2]})(标记来自代码内容),但我还需要一个创建如下命令的命令:!计划创建管理员(plan),这样做就是创建一个名为plan_Administrator的变量,并将该变量分配给计划的值 但是怎么做呢 plan(args[3])???您要做的是使用动态变量名进行调用:为此,

因此,我有一个命令,根据用户键入的内容显示变量。 例如,如果用户想知道(在我的代码中)用户将编写的“版主”计划!计划版主和它将要做的是打印版主的计划,方法是:message.channel.send(
${plan}${args[2]}
)(标记来自代码内容),但我还需要一个创建如下命令的命令:!计划创建管理员(plan),这样做就是创建一个名为plan_Administrator的变量,并将该变量分配给计划的值

但是怎么做呢


plan(args[3])
???

您要做的是使用动态变量名进行调用:为此,您需要使用
eval
语句,强烈建议使用该语句,因为它会使您的代码受到注入攻击。我将向您展示如何执行此操作,但请注意,将属性保存在对象中更安全

要创建具有动态名称的变量,您需要让您的代码对如下语句进行求值:
var(varName)=(value)
。它看起来像这样:

//名称和值应该是命令中的参数
评估('var'+name+'='+value)
//请注意,访问变量的唯一方法是使用全局作用域:
让myValue=global[variableName]
更安全的方法是使用字典:

//代码中的某个地方,以便可以通过命令访问
让userVariables={}
//当您想要访问一个变量时
让myValue=userVariables[varName]
//当您想要设置一个变量时
userVariables[varName]=yourValue

你现在有什么?谢谢,有点忘了这篇文章,对不起,我也不知道你是否在讽刺你刚才说我的代码受到注入攻击的部分,但我会选择更安全的版本。@agentORW不,我对注入问题非常认真。假设您的用户键入类似
a=1;console.log(“其他代码”);a
:没有空格,因此所有内容都被解释为
名称
参数,您最终计算的代码分配了
变量,但也运行了
控制台.log
。现在想象一下,他们不是登录到控制台,而是决定关闭进程,公开您的令牌,或者让bot做任何事情:通过在那里注入代码,他们实际上可以在
eval
函数的范围内做任何可能的事。字典解决了这个问题;)好啊我一定会做得更好。顺便问一下,您如何向dic添加内容?我在网上找到了一种方法:
plans[name]=args[2]
,但这会将整个过程重置为仅此而已,所以当我试图发出打印命令时,它会说我不能发送空消息。另外,当我尝试添加多个dict时,它也不起作用,并且会替换整个dict。如果你使用不同的
名称
参数,它就不能替换整个dict。我的意思是,这个dictionary只是一个普通的对象,它没有任何特殊之处,因此不可能发生奇怪的事情