80
examples/echo-bot.js
Archivo normal
80
examples/echo-bot.js
Archivo normal
@@ -0,0 +1,80 @@
|
||||
/**
|
||||
* Simple example: Echo Bot
|
||||
* A bot that echoes back any message sent to it
|
||||
*/
|
||||
|
||||
const { Client } = require('@xmpp/client');
|
||||
const { xml } = require('@xmpp/client');
|
||||
|
||||
// Bot configuration
|
||||
const BOT_JID = 'echobot@localhost';
|
||||
const BOT_PASSWORD = 'password';
|
||||
const SERVER = 'localhost';
|
||||
const PORT = 5222;
|
||||
|
||||
// Create XMPP client
|
||||
const client = new Client({
|
||||
service: `xmpp://${SERVER}:${PORT}`,
|
||||
domain: 'localhost',
|
||||
username: 'echobot',
|
||||
password: BOT_PASSWORD
|
||||
});
|
||||
|
||||
// Handle connection
|
||||
client.on('online', async (address) => {
|
||||
console.log(`Echo Bot online as ${address.toString()}`);
|
||||
|
||||
// Send initial presence
|
||||
await client.send(xml('presence'));
|
||||
|
||||
console.log('Echo Bot ready to receive messages!');
|
||||
});
|
||||
|
||||
// Handle incoming stanzas
|
||||
client.on('stanza', async (stanza) => {
|
||||
// Only process message stanzas
|
||||
if (stanza.is('message')) {
|
||||
const from = stanza.attrs.from;
|
||||
const body = stanza.getChildText('body');
|
||||
const type = stanza.attrs.type || 'chat';
|
||||
|
||||
// Ignore messages without body or from ourselves
|
||||
if (!body || from === BOT_JID) return;
|
||||
|
||||
console.log(`Message from ${from}: ${body}`);
|
||||
|
||||
// Create echo response
|
||||
const response = xml(
|
||||
'message',
|
||||
{ type, to: from },
|
||||
xml('body', {}, `Echo: ${body}`)
|
||||
);
|
||||
|
||||
// Send response
|
||||
await client.send(response);
|
||||
console.log(`Sent echo to ${from}`);
|
||||
}
|
||||
});
|
||||
|
||||
// Handle errors
|
||||
client.on('error', (err) => {
|
||||
console.error('Error:', err);
|
||||
});
|
||||
|
||||
// Handle offline
|
||||
client.on('offline', () => {
|
||||
console.log('Echo Bot offline');
|
||||
});
|
||||
|
||||
// Start the client
|
||||
client.start().catch(console.error);
|
||||
|
||||
// Handle process termination
|
||||
process.on('SIGINT', async () => {
|
||||
console.log('\nShutting down Echo Bot...');
|
||||
await client.stop();
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
console.log('Starting Echo Bot...');
|
||||
console.log(`Connecting to ${SERVER}:${PORT} as ${BOT_JID}`);
|
||||
Referencia en una nueva incidencia
Block a user