node.js/discord.js:TypeError:无法读取 null 的属性“setPresence”

     2023-03-14     250

关键词:

【中文标题】node.js/discord.js:TypeError:无法读取 null 的属性“setPresence”【英文标题】:node.js/discord.js: TypeError: Cannot read property 'setPresence' of null 【发布时间】:2020-02-16 22:19:19 【问题描述】:

尝试一个简单的测试,但我从这一行得到一个错误: client.user.setPresence('game', type: 'PLAYING' );

VSCode 的日志:

C:\Users\dvmvged\Documents\mao>node . whoa.js
C:\Users\dvmvged\Documents\mao\whoa.js:9
client.user.setPresence('game',  type: 'PLAYING' );
            ^

TypeError: Cannot read property 'setPresence' of null
    at Object.<anonymous> (C:\Users\dvmvged\Documents\mao\whoa.js:9:13)
←[90m    at Module._compile (internal/modules/cjs/loader.js:956:30)←[39m
←[90m    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)←[39m
←[90m    at Module.load (internal/modules/cjs/loader.js:812:32)←[39m
←[90m    at Function.Module._load (internal/modules/cjs/loader.js:724:14)←[39m
←[90m    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)←[39m
←[90m    at internal/main/run_main_module.js:17:11←[39m

whoa.js

    const Discord = require('discord.js');
    const client = new Discord.Client();

    client.on('ready', () => 
        console.log("Logged in.");
        client.login("token");
    );

    client.user.setPresence('test',  type: 'PLAYING' );

package.json:

 
    "name":"test-bot",
    "version":"1.0.0",
    "description":"simple test",
    "main":"whoa.js",
    "dependencies": 
        "discord.js":"^11.5.1"
    ,
    "devDependencies": 

    ,
    "scripts": 
        "test":"echo \"Error: no test specified\" && exit 1"
    ,
    "author":"no one",
    "license":"ISC"

NPM 版本:6.11.3

Node.js 版本:12.12.0

Discord.js 版本:11.5.1

编辑: 只是为了让您知道,我尝试了 .setActivity 和 .setGame。同样的错误。

【问题讨论】:

我假设您将实际令牌传递给 .login() 而不是 "token" @c_sagan 不,我只是想隐藏我的令牌 尝试将.login() 移到.on() 范围之外。见docs 还要注意.login()返回一个promise,所以当你调用.setPresence()时,你还没有收到来自.login()调用的响应。试试.login().then(client.user.setPresence()) 同样的错误,我尝试了你让我做的一切 【参考方案1】:

我认为这里发生的事情是 Node.js 事件循环的结果。您调用异步函数.login(),并在.login() 的响应到达之前立即尝试client.user.setPresence()

试试

  .login("token")
  .then(client.user.setPresence("game",  type: "PLAYING" ));

见Node Event Loop

【讨论】:

试过了,同样的错误。 client.login("令牌"); client.user.setPresence('game', type: 'PLAYING' ); TypeError:无法读取 null 的属性“setPresence”【参考方案2】:

.user 在您呼叫他时尚未填充。我将在这里注释事情发生的顺序。

const Discord = require('discord.js');
const client = new Discord.Client();

// #1
client.on('ready', () => 
    // #3
    console.log("Logged in.");
    client.login("token");
);

// #2
client.user.setPresence('test',  type: 'PLAYING' );

您只有在客户端准备好后才能保证 .user 存在。

每当您在节点中(不仅仅是在节点中!)中使用 回调 时,您都会将函数作为参数传递给某些东西。

该回调可能是计划该函数在以后运行。在这种特定情况下,它安排具有console.log 的函数在客户端“准备就绪”的未来事件上运行。

【讨论】:

这行得通。但它没有向控制台输出任何内容。另外,我想稍后在代码中更改机器人的状态。我以后可以使用相同的 .setPresence 函数吗? 所以我实际上从未制作过不和谐的机器人。从快速查看文档看来,您应该在外部调用“登录”(而不是在就绪回调中)。当客户端成功进行身份验证时,它应该发出“就绪”事件。 没错,您应该在就绪事件的回调之外登录(使用您的机器人令牌)。成功登录后,ready 事件将触发,并且您提供的回调函数中的内容将运行。此时,client.user 不应再为null,您将能够使用.setPresence() 之类的方法。基本上,将您的方法放在 ready 事件的回调中,您可以将 .login() 放在 js 文件的开头或结尾,没关系(只是不在尚未运行的回调中,显然它不应该在定义 client 之前)。

从函数中导出数据 [mysql, node.js, discord.js]

】从函数中导出数据[mysql,node.js,discord.js]【英文标题】:Exportingdatafromthefunction[mysql,node.js,discord.js]【发布时间】:2021-08-1414:05:07【问题描述】:我在从函数中导出数据时遇到了这样的问题。我不知道它是否可以完成,但我在这里... 查看详情

node.js/discord.js:TypeError:无法读取 null 的属性“setPresence”

】node.js/discord.js:TypeError:无法读取null的属性“setPresence”【英文标题】:node.js/discord.js:TypeError:Cannotreadproperty\'setPresence\'ofnull【发布时间】:2020-02-1622:19:19【问题描述】:尝试一个简单的测试,但我从这一行得到一个错误:clie... 查看详情

我的消息在 node.js/discord.js 中重复了很多次

】我的消息在node.js/discord.js中重复了很多次【英文标题】:Mymessagesrepeatmanytimesinnode.js/discord.js【发布时间】:2020-05-1201:45:01【问题描述】:我正在制作一个ONUW(OneNightUltimateWerewolf)Discord机器人,可以让你玩游戏。对于游戏,我... 查看详情

如何从 json 响应中连接来自不同对象数组的值? Node.js、Discord.js

】如何从json响应中连接来自不同对象数组的值?Node.js、Discord.js【英文标题】:HowdoIjoinvaluesfromdifferentobjectarrayfromajsonresponse?Node.js,Discord.js【发布时间】:2021-08-0219:12:39【问题描述】:所以这是来自api包装器npm包的JSON响应[name:Dank... 查看详情

Node.js、discord.js 和 MySQL - ER_NO_SUCH_TABLE:表 'NAME' 不存在

】Node.js、discord.js和MySQL-ER_NO_SUCH_TABLE:表\\\'NAME\\\'不存在【英文标题】:Node.js,discord.js&MySQL-ER_NO_SUCH_TABLE:Table\'NAME\'doesn\'texistNode.js、discord.js和MySQL-ER_NO_SUCH_TABLE:表\'NAME\'不存在【发布时间】:2021-04-1416:00:51【问题 查看详情

Node.js Discord.js UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“calculatedPosition”

】Node.jsDiscord.jsUnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“calculatedPosition”【英文标题】:Node.jsDiscord.jsUnhandledPromiseRejectionWarning:TypeError:Cannotreadproperty\'calculatedPosition\'ofundefined【发布时间】:2020 查看详情

为啥我的 node.js discord.js 机器人不发送文件? (没有错误)(可以发送消息)

】为啥我的node.jsdiscord.js机器人不发送文件?(没有错误)(可以发送消息)【英文标题】:whymynode.jsdiscord.jsbotisnotsendingfiles?(noerrors)(cansendmessages)为什么我的node.jsdiscord.js机器人不发送文件?(没有错误)(可以发送消息)【发... 查看详情

Heroku Node.js Discord.js 机器人部署失败

】HerokuNode.jsDiscord.js机器人部署失败【英文标题】:HerokuNode.jsDiscord.jsbotdeploymentfailed【发布时间】:2019-02-1601:47:22【问题描述】:我遇到了很多问题。我创建了一个本地git存储库,将推荐设置设置为advicedhere,并将机器人使用的... 查看详情

如何只显示最新的文档?

...时间】:2019-05-2818:05:18【问题描述】:我让猫鼬在Node.JS/Discord.JS上搜索一个文档,我将它排序为date:-1,它仍然发送数据库中最旧的文档。这是我的代码,我做错了什么?gLog.findOne("GiveawayHostID":name).sort(date:-1).exec(funct 查看详情

不和谐 <@!user id> 和 <@userid>

】不和谐<@!userid>和<@userid>【英文标题】:Discord<@!userid>vs<@userid>【发布时间】:2017-12-2909:23:54【问题描述】:所以我正在使用Node.JS/Discord.JS创建一个机器人,我有一个问题。在某些服务器上,当您提及用户时,... 查看详情

将数据写入 Mongodb 或更新它,如果它已经在数据库中

...020-12-3002:56:36【问题描述】:所以我正在尝试使用Node.JS、Discord.js和MongoDB制作一个关卡系统,但我不知道如何在数据库中添加/更新数据。这是我使用的代码,但它不起作用:if(db.collec 查看详情

删除/保留数据框列

...了所有的建议here无论我做什么,我都会收到以下错误:TypeEr 查看详情

无法在 Firebase 函数中读取 null 的属性

...f中删除了值,我在FirebaseFunctions日志中收到此错误消息:TypeEr 查看详情

20161213py学习笔记:string元素不可修改/几种迭代

1、字符串中的元素是不可修改的strings=‘andasfefanagrgihaigahairt‘forindex,stringinenumerate(strings):  #printindex,string  ifstring==‘a‘:  strings[index]=‘w‘printstrings 这段代码运行时,会出现:  strings[index]=‘w‘  TypeEr 查看详情

TypeError:“图像”对象不能使用 PIL 进行下标

】TypeError:“图像”对象不能使用PIL进行下标【英文标题】:TypeError:\'Image\'objectisnotsubscriptableusingPIL【发布时间】:2021-04-1810:17:13【问题描述】:我正在尝试在googlecolab上开发一个网络应用程序。我想在这个Web应用程序中使用我... 查看详情

ionic 2中的本机facebook登录

...件。但是当我运行应用程序时出现错误未捕获(承诺):TypeEr 查看详情

Worklight 适配器它不是一个函数,它是“对象”。错误

...ript的java代码我得到一个错误:rocedureinvocationerror.EcmaError:TypeEr 查看详情

将大型嵌套字典转储到 JSON 对象中[重复]

...接转储给我一个错误:json_dictionary=json.dumps(mapped_dictionary)TypeEr 查看详情