首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Stanza.io插件XEP-0012:最后一项活动

Stanza.io插件XEP-0012:最后一项活动
EN

Stack Overflow用户
提问于 2016-12-15 13:08:27
回答 2查看 488关注 0票数 1

当默认情况下Stanza.io不支持XEP-0012时,我想实现它。

我正在遵循如何从它的文档创建插件,但它不工作。

下面是我的代码(last.js):

代码语言:javascript
复制
'use strict';

module.exports = function (client) {

    client.disco.addFeature('jabber:iq:last');

    client.on('jabber:iq:last', function (iq) {
        client.sendIq(iq.resultReply({
            last: new Date().getTime()
        }));
    });

    client.getLastActivity = function (jid, cb) {
        return this.sendIq({
            to: jid,
            type: 'get',
            last: true
        }, cb);
    };

};

然后我将它与:client.use(require('last'))一起使用

但是当我调用这个函数时,它会返回一个error bad request <bad-request xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error>

我遗漏了什么?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-07-18 01:35:09

我们基本上需要创建自定义节并将其作为iq发送

代码语言:javascript
复制
this.client.use(this.setCustomMessage.bind(this));
setCustomMessage(client, stanzas) {
const lastActivity = stanzas.define({
    name: 'lastActivity',
    element: 'query',
    namespace: 'jabber:iq:last',
    fields: {
    seconds: stanzas.utils.attribute('seconds')
    }
});
stanzas.withIQ(iq => {
            stanzas.extend(iq, lastActivity);
        });
}

并获取具有jid作为id的用户的lastActivity。

代码语言:javascript
复制
getLastActivity(userId, cb) {
        return this.client.sendIq({
            to: 'userId',
            type: 'get',
            id: 'last',
            query: true
        }, cb);
    }
}

您可以通过两种方式获得上一次活动的结果:从promise获得响应

代码语言:javascript
复制
this.getLastActivity(userId).then(data => {
    if (data && data.query && data.query.seconds) {
    // Math.round(new Date())-(parseInt(data.query.seconds, 10)*1000) 
       will give last activity 
    }
});

代码语言:javascript
复制
client.on('iq', data => {
    if (data.query && data.query.seconds) {
    // Math.round(new Date())-(parseInt(data.query.seconds, 10)*1000) 
       will give last activity 
    }
});
票数 2
EN

Stack Overflow用户

发布于 2018-02-07 14:27:49

代码语言:javascript
复制
module.exports = function (client, stanzas) {

// 1. Create and register our custom `mystanza` stanza type

const helpers = stanzas.utils;

const IqLastActivity = stanzas.define({
    name: 'query',
    element: 'query',
    namespace: 'jabber:iq:last',
    fields: {
        seconds: helpers.attribute('seconds')
    }
});

stanzas.withIq((Iq) => {
    stanzas.extend(Iq, IqLastActivity);
});

// eslint-disable-next-line no-param-reassign
client.lastActivityByIq = (data) => {
    client.sendIq(data);
};
client.on('iq', (iq) => {
    if (iq.query) {
        client.emit('iq:last', iq);
    }
});

client.on('iq:last', (iq) => {
       console.log('iq:last', iq);
});
};

将此代码添加到客户端文件中

从‘./PathToFile/ IqLastActivity’导入iqLastActivity;

client.use(IqLastActivity);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41156817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档