stanza.io插件xep-0012:最后一个活动



我想在stanza.io不支持的情况下实现xep-0012。

im遵循如何从文档中创建插件但不起作用的插件。

HER是我的代码(last.js):

'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'))

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

我缺少什么?

谢谢

我们基本上需要创建一个自定义stanza并将其发送为 iq

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

getLastActivity(userId, cb) {
        return this.client.sendIq({
            to: 'userId',
            type: 'get',
            id: 'last',
            query: true
        }, cb);
    }
}

您可以通过两种方式获得最后一个活动的结果:要么从Promise

获得回应
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 
    }
});

client.on('iq', data => {
    if (data.query && data.query.seconds) {
    // Math.round(new Date())-(parseInt(data.query.seconds, 10)*1000) 
       will give last activity 
    }
});
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);

相关内容

  • 没有找到相关文章