broidHQ / broid-kit

Bot framework powered by Broid
Other
60 stars 9 forks source link

Is there a method to send a message to all used messengers? #29

Open tenorok opened 6 years ago

tenorok commented 6 years ago

For example we registered a few messengers via use-method:

const bot = new Bot({
  logLevel: "info"
});

bot.use(new BroidDiscord({...options}));
bot.use(new BroidMessenger({...options}));
bot.use(new BroidSlack({...options}));

And now we need to send message for all of these messengers:

bot.on('Person').subscribe(); // For execute `.connect()` on every integration (1)
bot.sendText('Hello World!', {
    '@context': 'https://www.w3.org/ns/activitystreams',
    generator: { ... }, // Discord
    published: 1515442064,
    type: 'Note',
    target: { id: '635580', name: 'Artem Kurbatov', type: 'Person' }
});
// And two more times for Messenger and Slack.

How we can send message to all registered messengers at one time?

P.S.: Why published property is reduced by a thousand?

(1) https://github.com/broidHQ/broid-kit/blob/master/src/core/Bot.ts#L111

tenorok commented 6 years ago

I understood that in this approach we have a problem to pass the different target.id for each messenger. By the way, after this pull request we can pass only really needed parameters:

this.bot.sendText('Hello!', {
    generator: {
        id: ???, // ← id is a hard to search
        name: 'telegram',
    },
    target: {
        id: '49328423',
        type: 'Person',
    },
});

But generator.id is hard to search and for simplification I offer to create a getIntegration()-method:

this.bot.sendText('Hello!', {
    generator: {
        id: bot.getIntegration('telegram'),
        name: 'telegram',
    },
    target: {
        id: '49328423',
        type: 'Person',
    },
});