【问题标题】:Discord Message Object Variables Aren't Being Returned CorrectlyDiscord 消息对象变量未正确返回
【发布时间】:2018-09-19 12:28:08
【问题描述】:

因此,由于某种原因,消息对象的变量没有正确返回,具体来说,我想获取消息的时间戳,但每次我使用 messageObj.timestamp 时,它都会将其返回为未定义。尽管使用logger.info(messageObj) 会返回一个数组,其中时间戳是变量之一,并且它具有正确的时间戳。

下面是我的代码,结果显示了我的问题:

    var BigD = require('discord.io');
var logger = require('winston');
var auth = require('./auth.json');



// Configure Logger

logger.remove(logger.transports.Console);
logger.add(logger.transports.Console, {
    colorize: true
});
logger.level = 'debug';

// Init bot

var bot = new BigD.Client({
    token: auth.token,
    autorun: true
});

bot.on('ready', function (evt) {
    logger.info('Burners are heated up and ready sir!');
    logger.info('Currently, my name is: ');
    logger.info(bot.username + ' - (' + bot.id + ')');
});

bot.on('message', (userName, userID, channelID, messageContent, messageObj) => {
    logger.info(messageObj);
    logger.info(messageObj.t);
    logger.info(messageObj.s);
    logger.info(messageObj.op);
    logger.info(messageObj.type);
    logger.info(messageObj.tts);
    logger.info(messageObj.timestamp);
    logger.info(messageObj.pinned);
    logger.info(messageObj.nonce);
    logger.info(messageObj.mentions);
    logger.info(messageObj.mention_roles);
    logger.info(messageObj.mention_everyone);
    logger.info(messageObj.id);
    logger.info(messageObj.embeds);
    logger.info(messageObj.edited_timestamp);
    logger.info(messageObj.content);
    logger.info(messageObj.channel_id);
    logger.info(messageObj.username);
    logger.info(messageObj.id); //'id' is twice, but it doesn't have the same value in the full printed version, could this be an indication of a separate container variable/method?
    logger.info(messageObj.discriminator);
    logger.info(messageObj.avatar);
    logger.info(messageObj.attachments);
});

这是 CMD 中返回的内容:

【问题讨论】:

  • 这似乎不是 discord.js 问题。在 discord.js 中没有 messageObj.t 返回 MESSAGE_CREATE
  • 这是专门针对机器人的,messageObjMessage 类对象的变量名,在Message Created 事件被触发时发送。我正在专门寻找 Message 对象变量没有正确调用的原因。
  • 是的,但 Discord.JS 是一个框架。并且仅当您使用该框架时才应使用该标签。你用的是什么框架?
  • stackoverflow.com/tags/discord.js "Discord.js 是一个 node.js 模块,允许开发人员与 Discord API 进行交互。使用这个标签来回答关于 discord.js 使用的问题,而不是关于Discord API 或一般的 Discord。”
  • 看来我正在使用 discord.io 与 discord 进行交互。

标签: discord discord.io


【解决方案1】:

如果你打印出messageObj,你会得到一个像这样的javascript对象

{ t: 'MESSAGE_CREATE',
  s: 4,
  op: 0,
  d:
   { type: 0,
     tts: false,
     timestamp: '2018-05-18T17:26:28.177000+00:00',
     pinned: false,
     nonce: '447087599983525888',
     mentions: [],
     mention_roles: [],
  ...

所以你可以像访问它

messageObj.d.timestamp

现在,至于您遇到问题的原因,您已经混淆了Client#on 的最后一个参数是什么。您将其命名为 messageObj 并将其称为“消息”,这在某种意义上可能是正确的,因为它仍然是发送给 discord 的消息,但它是 Event 对象而不是 Message 对象。

Message 对象如下所示

{ attachments: [],
  tts: false,
  embeds: [],
  timestamp: '2018-05-18T02:14:14.944000+00:00',
  mention_everyone: false,
  id: '446858023168638976',
  ....

将按照您尝试的方式访问。

【讨论】:

    猜你喜欢
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2018-09-04
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多