| |
| const DubAPI = require('./index.js'); |
|
|
| console.log('Starting DubAPI example...'); |
|
|
| |
| const username = 'kuber'; |
| const password = 'cookTV12'; |
|
|
| |
| const roomName = 'nononono'; |
|
|
| |
| const config = { |
| commandPrefix: '!', |
| autoReconnect: true, |
| reconnectInterval: 15000, |
| greetUsers: true, |
| autoUpvote: true, |
| botName: 'Kuber', |
| respondToMentions: true |
| }; |
|
|
| console.log('Attempting to create DubAPI instance with username:', username); |
| console.log('Connecting to room:', roomName); |
|
|
| new DubAPI({username: username, password: password}, function(err, bot) { |
| if (err) return console.error('Error connecting:', err); |
|
|
| console.log('Running DubAPI v' + bot.version); |
|
|
| |
| |
| |
| function formatTime(seconds) { |
| const mins = Math.floor(seconds / 60); |
| const secs = Math.floor(seconds % 60); |
| return `${mins}:${secs < 10 ? '0' + secs : secs}`; |
| } |
| |
| |
| function isStaff(user) { |
| return user && bot.isStaff(user); |
| } |
| |
| |
| |
| |
| function handleCommand(data) { |
| |
| if (!data.message.startsWith(config.commandPrefix)) return; |
| |
| |
| const args = data.message.slice(config.commandPrefix.length).trim().split(/\s+/); |
| const command = args.shift().toLowerCase(); |
| |
| |
| const user = bot.getUser(data.user.id); |
| |
| switch (command) { |
| case 'ping': |
| bot.sendChat('Pong! 🏓'); |
| break; |
| |
| case 'info': |
| const currentMedia = bot.getMedia(); |
| if (currentMedia) { |
| bot.sendChat(`Current track: ${currentMedia.name} by ${currentMedia.artist || 'Unknown'}`); |
| } else { |
| bot.sendChat('No track is currently playing.'); |
| } |
| break; |
| |
| case 'time': |
| const remaining = bot.getTimeRemaining(); |
| const elapsed = bot.getTimeElapsed(); |
| if (remaining >= 0) { |
| bot.sendChat(`Time remaining: ${formatTime(remaining)} | Elapsed: ${formatTime(elapsed)}`); |
| } else { |
| bot.sendChat('No track is currently playing.'); |
| } |
| break; |
| |
| case 'skip': |
| if (isStaff(user) && bot.hasPermission(user, 'skip')) { |
| bot.moderateSkip(function(err) { |
| if (err) return console.error('Error skipping track:', err); |
| bot.sendChat('Track skipped by ' + user.username); |
| }); |
| } else { |
| bot.sendChat('You need to be staff with skip permission to use this command.'); |
| } |
| break; |
| |
| case 'users': |
| const users = bot.getUsers(); |
| bot.sendChat(`There are ${users.length} users in the room.`); |
| break; |
| |
| case 'staff': |
| const staff = bot.getStaff(); |
| bot.sendChat(`There are ${staff.length} staff members in the room.`); |
| break; |
| |
| case 'help': |
| bot.sendChat('Available commands: !ping, !info, !time, !users, !staff, !help'); |
| break; |
| |
| default: |
| |
| break; |
| } |
| } |
|
|
| |
| |
| function connect() { |
| console.log('Attempting to connect to room:', roomName); |
| bot.connect(roomName); |
| } |
|
|
| |
| |
| bot.on('connected', function(name) { |
| console.log('Connected to ' + name); |
| console.log('Bot is ready to respond to commands. Use ' + config.commandPrefix + 'help for available commands'); |
| }); |
|
|
| bot.on('disconnected', function(name) { |
| console.log('Disconnected from ' + name); |
| |
| if (config.autoReconnect) { |
| console.log(`Attempting to reconnect in ${config.reconnectInterval / 1000} seconds...`); |
| setTimeout(connect, config.reconnectInterval); |
| } |
| }); |
|
|
| bot.on('error', function(err) { |
| console.error('Error:', err); |
| }); |
|
|
| |
| bot.on(bot.events.chatMessage, function(data) { |
| console.log(data.user.username + ': ' + data.message); |
| |
| |
| handleCommand(data); |
| |
| |
| if (config.respondToMentions && data.user.username !== config.botName) { |
| |
| const message = data.message; |
| const lowerMessage = message.toLowerCase(); |
| const botName = config.botName.toLowerCase(); |
| |
| |
| const isMentioned = |
| lowerMessage.includes('@' + botName) || |
| lowerMessage.startsWith(botName) || |
| lowerMessage.includes(' ' + botName + ' ') || |
| lowerMessage.endsWith(' ' + botName); |
| |
| console.log('Checking for mentions in message:', message, 'Mentioned:', isMentioned); |
| |
| |
| if (isMentioned) { |
| console.log(`Bot was mentioned by ${data.user.username}`); |
| |
| |
| let response; |
| const lowerMsg = data.message.toLowerCase(); |
| |
| |
| if (lowerMsg.includes('?')) { |
| if (lowerMsg.includes('how are you') || lowerMsg.includes('how\'s it going')) { |
| response = `I'm doing great, @${data.user.username}! How about you?`; |
| } else if (lowerMsg.includes('help')) { |
| response = `Need help, @${data.user.username}? Try using !help to see my commands.`; |
| } else if (lowerMsg.includes('what') && (lowerMsg.includes('song') || lowerMsg.includes('track') || lowerMsg.includes('playing'))) { |
| |
| const currentMedia = bot.getMedia(); |
| if (currentMedia) { |
| response = `@${data.user.username}, we're listening to ${currentMedia.name} by ${currentMedia.artist || 'Unknown'}.`; |
| } else { |
| response = `@${data.user.username}, there's no track playing right now.`; |
| } |
| } else { |
| |
| response = `@${data.user.username}, that's a good question! Try using my commands with ${config.commandPrefix}help.`; |
| } |
| } |
| |
| else if (lowerMsg.includes('hello') || lowerMsg.includes('hi') || lowerMsg.includes('hey') || lowerMsg.includes('sup')) { |
| response = `Hey there, @${data.user.username}! How can I help you today?`; |
| } |
| |
| else if (lowerMsg.includes('thank') || lowerMsg.includes('thanks') || lowerMsg.includes('thx')) { |
| response = `You're welcome, @${data.user.username}! 😊`; |
| } |
| |
| else { |
| const responses = [ |
| `Yes, @${data.user.username}? How can I help you?`, |
| `I'm here, @${data.user.username}! Need something?`, |
| `Hey @${data.user.username}, what's up?`, |
| `@${data.user.username}, at your service! Try ${config.commandPrefix}help for commands.` |
| ]; |
| response = responses[Math.floor(Math.random() * responses.length)]; |
| } |
| |
| |
| setTimeout(() => { |
| bot.sendChat(response); |
| }, 1000 + Math.random() * 1000); |
| } |
| } |
| }); |
|
|
| |
| bot.on(bot.events.userJoin, function(data) { |
| console.log(`${data.user.username} joined the room`); |
| |
| |
| if (config.greetUsers) { |
| bot.sendChat(`Welcome to the room, @${data.user.username}!`); |
| } |
| }); |
|
|
| |
| bot.on(bot.events.userLeave, function(data) { |
| console.log(`${data.user.username} left the room`); |
| }); |
|
|
| |
| bot.on(bot.events.roomPlaylistUpdate, function(data) { |
| if (!data.media) return; |
| |
| console.log(`Now playing: ${data.media.name} by ${data.media.artist || 'Unknown'}`); |
| |
| |
| if (config.autoUpvote) { |
| setTimeout(() => { |
| bot.updub(function(err) { |
| if (err) console.error('Error upvoting:', err); |
| else console.log('Auto-upvoted current song'); |
| }); |
| }, 5000); |
| } |
| }); |
|
|
| |
| connect(); |
| }); |
|
|