forked from wmantly/mc-bot-town
		
	multi bots online
This commit is contained in:
		@ -1,12 +1,12 @@
 | 
				
			|||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
	"mc": {
 | 
						"mc": {
 | 
				
			||||||
		"server": "corejourney.org._vAUTO.mc.proxy",
 | 
							"host": "corejourney.org",
 | 
				
			||||||
		"bots": {
 | 
							// "bots": {
 | 
				
			||||||
			"bot_name": {
 | 
							// 	"bot_name": {
 | 
				
			||||||
				"username": "<configure in secrets>",
 | 
							// 		"username": "<configure in secrets>",
 | 
				
			||||||
				"password": "<configure in secrets>",
 | 
							// 		"password": "<configure in secrets>",
 | 
				
			||||||
				'auth': "microsoft"
 | 
							// 		'auth': "microsoft"
 | 
				
			||||||
			}
 | 
							// 	}
 | 
				
			||||||
		}
 | 
							// }
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										16
									
								
								nodejs/controller/commands/default.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								nodejs/controller/commands/default.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					module.exports =  {
 | 
				
			||||||
 | 
						'help': {
 | 
				
			||||||
 | 
						    desc: `Print the allowed commands.`,
 | 
				
			||||||
 | 
						    async function(from){
 | 
				
			||||||
 | 
						        console.log('called help', from)
 | 
				
			||||||
 | 
						        let intro = [
 | 
				
			||||||
 | 
						            'I am a bot owned and operated by',
 | 
				
			||||||
 | 
						            'wmantly <wmantly@gmail.com>',
 | 
				
			||||||
 | 
						            'You have access to the following commands:'
 | 
				
			||||||
 | 
						        ]
 | 
				
			||||||
 | 
						        await this.whisper(from, ...intro, ...this.__reduceCommands(from).map(command =>
 | 
				
			||||||
 | 
						            `${command} -- ${this.commands[command].desc || ''}`
 | 
				
			||||||
 | 
						        ));
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										161
									
								
								nodejs/controller/commands/fun.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								nodejs/controller/commands/fun.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,161 @@
 | 
				
			|||||||
 | 
					let ballOptions = [
 | 
				
			||||||
 | 
					    "It is certain.",
 | 
				
			||||||
 | 
					    "It is decidedly so.",
 | 
				
			||||||
 | 
					    "Without a doubt.",
 | 
				
			||||||
 | 
					    "Yes definitely.",
 | 
				
			||||||
 | 
					    "You may rely on it.",
 | 
				
			||||||
 | 
					    "As I see it, yes.",
 | 
				
			||||||
 | 
					    "Most likely.",
 | 
				
			||||||
 | 
					    "Outlook good.",
 | 
				
			||||||
 | 
					    "The Core gods will it to be!",
 | 
				
			||||||
 | 
					    "Yes.",
 | 
				
			||||||
 | 
					    "Signs point to yes.",
 | 
				
			||||||
 | 
					    "Reply hazy, try again.",
 | 
				
			||||||
 | 
					    "You should ask Ethan",
 | 
				
			||||||
 | 
					    "Ask again later.",
 | 
				
			||||||
 | 
					    "Better not tell you now.",
 | 
				
			||||||
 | 
					    "Cannot predict now.",
 | 
				
			||||||
 | 
					    "Concentrate and ask again.",
 | 
				
			||||||
 | 
					    "You will find the answers during you journey to The Core!",
 | 
				
			||||||
 | 
					    "Don't count on it.",
 | 
				
			||||||
 | 
					    "My reply is no.",
 | 
				
			||||||
 | 
					    "My sources say no.",
 | 
				
			||||||
 | 
					    "Outlook not so good.",
 | 
				
			||||||
 | 
					    "Very doubtful.",
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    '8ball':{
 | 
				
			||||||
 | 
					        desc: `magic 8 Ball pick.`,
 | 
				
			||||||
 | 
					        async function(from){
 | 
				
			||||||
 | 
					            await this.say(
 | 
				
			||||||
 | 
					                `> The 8 Ball says...`,
 | 
				
			||||||
 | 
					                `> ${ballOptions[Math.floor(Math.random()*ballOptions.length)]}`
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand("joke", {
 | 
				
			||||||
 | 
					//     desc: "Tells a random joke.",
 | 
				
			||||||
 | 
					//     async function(from){
 | 
				
			||||||
 | 
					//         await this.say('> Let me think...');
 | 
				
			||||||
 | 
					//         let res = await axios.get('https://v2.jokeapi.dev/joke/Any?type=single')
 | 
				
			||||||
 | 
					//         await this.say(...res.data.joke.split('\n').map(e => `> ${e}`));
 | 
				
			||||||
 | 
					//     },
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand("quote", {
 | 
				
			||||||
 | 
					//     desc: 'Say an inspirational quote.',
 | 
				
			||||||
 | 
					//     async function(from){
 | 
				
			||||||
 | 
					//         await this.say('> Right away!');
 | 
				
			||||||
 | 
					//         let res = await axios.get('https://zenquotes.io/api/random')
 | 
				
			||||||
 | 
					//         await this.say(`> ${res.data[0].q} -- ${res.data[0].a}`);
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand('west-quote', { 
 | 
				
			||||||
 | 
					//     desc: `Say a random Kanye West quote.`,
 | 
				
			||||||
 | 
					//     async function(from) {
 | 
				
			||||||
 | 
					//         await this.say('> And here we go!');
 | 
				
			||||||
 | 
					//         let res = await axios.get('https://api.kanye.rest/');
 | 
				
			||||||
 | 
					//         await this.say(`> ${res.data.quote} -- Kanye West`);
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand('pink-quote', { 
 | 
				
			||||||
 | 
					//     desc: `Say a random Pink Floyd quote.`,
 | 
				
			||||||
 | 
					//     async function(from) {
 | 
				
			||||||
 | 
					//         await this.say(
 | 
				
			||||||
 | 
					//             `> Rock 'n' Roll`,
 | 
				
			||||||
 | 
					//             `> ${pink_quotes[Math.floor(Math.random()*pink_quotes.length)]} -- Pink Floyd`
 | 
				
			||||||
 | 
					//         );        
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand("fact", {
 | 
				
			||||||
 | 
					//     desc: `Say a random fact.`,
 | 
				
			||||||
 | 
					//     async function(from){
 | 
				
			||||||
 | 
					//         await this.say('> The internet says this is true?');
 | 
				
			||||||
 | 
					//         let res = await axios.get('https://uselessfacts.jsph.pl/random.json?language=en')
 | 
				
			||||||
 | 
					//         await this.say(
 | 
				
			||||||
 | 
					//             `> ${res.data.text}`,
 | 
				
			||||||
 | 
					//             `> source: ${res.data.source}`
 | 
				
			||||||
 | 
					//         );
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand("advice", { 
 | 
				
			||||||
 | 
					//     desc: `Say some random advice.`,
 | 
				
			||||||
 | 
					//     async function(from){
 | 
				
			||||||
 | 
					//         await this.say('> Try this:');
 | 
				
			||||||
 | 
					//         let res = await axios.get('https://api.adviceslip.com/advice');
 | 
				
			||||||
 | 
					//         await this.say(`> ${res.data.slip.advice}`);
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand('idea', {
 | 
				
			||||||
 | 
					//     desc: `Say a random start up idea.`,
 | 
				
			||||||
 | 
					//     async function(from){
 | 
				
			||||||
 | 
					//         await this.say('> How about?');
 | 
				
			||||||
 | 
					//         let res = await axios.get('https://itsthisforthis.com/api.php?text')
 | 
				
			||||||
 | 
					//         await this.say(`> ${res.data}`);
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand('discord', {
 | 
				
			||||||
 | 
					//     desc: `Say the CJ discord invite link.`,
 | 
				
			||||||
 | 
					//     async function(from) {
 | 
				
			||||||
 | 
					//         await this.say('https://discord.gg/hyby9m8');
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand('dice',{
 | 
				
			||||||
 | 
					//     desc: `Roll a die. You can state the max size on the dice. Default is 6.`,
 | 
				
			||||||
 | 
					//     async function(from, size){
 | 
				
			||||||
 | 
					//         size = size || 6;
 | 
				
			||||||
 | 
					//         if(!Number.isInteger(Number(size))){
 | 
				
			||||||
 | 
					//             this.whisper(from, `${size} is not a whole number...`)
 | 
				
			||||||
 | 
					//             return ;
 | 
				
			||||||
 | 
					//         }
 | 
				
			||||||
 | 
					//         await this.say(
 | 
				
			||||||
 | 
					//             `> Rolling a dice for ${from}`,
 | 
				
			||||||
 | 
					//             `> ${Math.floor(Math.random()*size)+1}`
 | 
				
			||||||
 | 
					//         );
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand('random-player', {
 | 
				
			||||||
 | 
					//     desc: `Return a random online player.`,
 | 
				
			||||||
 | 
					//     async function(from){
 | 
				
			||||||
 | 
					//         let players = bot.getPlayers()
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					//         delete players[bot.bot.entity.username]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//         let keys = Object.keys(players);
 | 
				
			||||||
 | 
					//         let player = players[keys[ keys.length * Math.random() << 0]];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//         await this.say(`> I pick [${player.lvl}]${player.username}`)
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand('flip', {
 | 
				
			||||||
 | 
					//     desc: `Flip a coin.`,
 | 
				
			||||||
 | 
					//     async function(from){
 | 
				
			||||||
 | 
					//         await this.say(
 | 
				
			||||||
 | 
					//             `> Flipping a coin for ${from}`,
 | 
				
			||||||
 | 
					//             `> ${!!(Math.floor(Math.random() * (3000 - 1500) + 1500)%2) ? "Heads" : "Tails"}`
 | 
				
			||||||
 | 
					//         );
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										7
									
								
								nodejs/controller/commands/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								nodejs/controller/commands/index.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
						default: require('./default'),
 | 
				
			||||||
 | 
						fun: require('./fun'),
 | 
				
			||||||
 | 
						invite: require('./invite'),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										103
									
								
								nodejs/controller/commands/invite.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								nodejs/controller/commands/invite.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,103 @@
 | 
				
			|||||||
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const {sleep} = require('../../utils');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let myAccounts = ['wmantly', 'useless666', 'tux4242']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let germans = ['YTMatze', 'mytzor']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let townMemebers = [
 | 
				
			||||||
 | 
					    'wmantly', 'useless666', 'tux4242', 
 | 
				
			||||||
 | 
					    'VinceNL',
 | 
				
			||||||
 | 
					    'Ethan63020', 'Ethan63021', 
 | 
				
			||||||
 | 
					    'pi_chef', 
 | 
				
			||||||
 | 
					    'EXLAlphaWolf', 'Sillychubbs',
 | 
				
			||||||
 | 
					    'BearSkates420', 'hloop', 
 | 
				
			||||||
 | 
					    'ogeiDNight', 'BobinaBlu', 'Roby_G_27',
 | 
				
			||||||
 | 
					    'kawiimeowz', 'RaindropCake24', 'KimiKava',
 | 
				
			||||||
 | 
					    'Keebyys',
 | 
				
			||||||
 | 
					    'YTMatze', 'mytzor',
 | 
				
			||||||
 | 
					    'jj_disaster', 'Cuttaway',
 | 
				
			||||||
 | 
					    'sonic_joe',
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let sites = {
 | 
				
			||||||
 | 
					    fo: {
 | 
				
			||||||
 | 
					        bot: 'jimin',
 | 
				
			||||||
 | 
					        desc: `Get an invite to the Farming outpost.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef', 'pi_chef', '1_cut', 'nootbot', 'VinceNL', 'Ethan63020', 'Ethan63021', 'KimiKava', 'kawiimeowz', 'RaindropCake24'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    fo2: {
 | 
				
			||||||
 | 
					        bot: 'henry',
 | 
				
			||||||
 | 
					        desc: `Get an invite to the Farming outpost 2.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef', 'pi_chef', '1_cut', 'Ethan63020', 'Ethan63021', 'VinceNL', 'nootbot'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    foend: {
 | 
				
			||||||
 | 
					        bot: 'ez',
 | 
				
			||||||
 | 
					        desc: `Get an invite to the Farming outpost in the end.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef', 'pi_chef', '1_cut',],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    sb: {
 | 
				
			||||||
 | 
					        bot: 'owen',
 | 
				
			||||||
 | 
					        desc: `Get an invite to the Sky Base.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef', 'pi_chef', '1_cut', 'Ethan63020', 'Ethan63021', 'VinceNL', 'nootbot'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    core: {
 | 
				
			||||||
 | 
					        bot: 'nova',
 | 
				
			||||||
 | 
					        desc: `Get an invite to the Core.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef', 'pi_chef', '1_cut', 'Ethan63020', 'Ethan63021', 'VinceNL', 'nootbot'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // city: {
 | 
				
			||||||
 | 
					    //     bot: 'art',
 | 
				
			||||||
 | 
					    //     desc: 'Invite to the city',
 | 
				
			||||||
 | 
					    //     allowed: ['wmantly', 'useless666', 'tux4242', 'owenshorts', 'VinceNL', 'Ethan63020', 'Ethan63021']
 | 
				
			||||||
 | 
					    // },
 | 
				
			||||||
 | 
					    german: {
 | 
				
			||||||
 | 
					        bot: 'linda',
 | 
				
			||||||
 | 
					        desc: `Get an invite you Germans area.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'owenshorts', 'VinceNL', 'Ethan63020', 'Ethan63021', 'pi_chef', 'YTMatze', 'mytzor', 'pi_chef', '1_cut', 'nootbot'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function getSiteFromBot(name){
 | 
				
			||||||
 | 
					    for(let site in sites){
 | 
				
			||||||
 | 
					        if(sites[site].bot === name){
 | 
				
			||||||
 | 
					            return sites[site];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
						'inv': {
 | 
				
			||||||
 | 
						    desc: `Have bot.\n  Site -- one'`,
 | 
				
			||||||
 | 
						    // allowed: townMemebers,
 | 
				
			||||||
 | 
						    async function(from, site){
 | 
				
			||||||
 | 
					            this.__unLockCommand();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(sites[site] && sites[site].allowed.includes(from)){
 | 
				
			||||||
 | 
					                let bot = this.constructor.bots[sites[site].bot];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if(!bot.isReady){
 | 
				
			||||||
 | 
					                    try{
 | 
				
			||||||
 | 
					                        await bot.connect();
 | 
				
			||||||
 | 
					                    }catch(error){
 | 
				
			||||||
 | 
					                        console.log('inv error connecting to bot');
 | 
				
			||||||
 | 
					                        this.whisper('Bot is not available right now, try again in 30 seconds.');
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    var clear = setTimeout(()=> bot.quit(), 10000);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                await bot.bot.chat(`/invite ${from}`);
 | 
				
			||||||
 | 
					                await bot.whisper(from, `accept invite from ${bot.bot.entity.username} within 10 seconds...`);
 | 
				
			||||||
 | 
					                bot.on('message', (message) =>{
 | 
				
			||||||
 | 
					                    if(message.toString() === `${from} teleported to you.`){
 | 
				
			||||||
 | 
					                        if(clear){
 | 
				
			||||||
 | 
					                            clearTimeout(clear);
 | 
				
			||||||
 | 
					                            bot.quit();
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1,55 +1,48 @@
 | 
				
			|||||||
'use strict';
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const {sleep} = require('../utils');
 | 
				
			||||||
const conf = require('../conf');
 | 
					const conf = require('../conf');
 | 
				
			||||||
const {CJbot} = require('../model/minecraft');
 | 
					const {CJbot} = require('../model/minecraft');
 | 
				
			||||||
const inventoryViewer = require('mineflayer-web-inventory');
 | 
					// const inventoryViewer = require('mineflayer-web-inventory');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const bot = new CJbot({
 | 
					const commands = require('./commands');
 | 
				
			||||||
	host: conf.mc.server,
 | 
					 | 
				
			||||||
	...conf.mc.bots.art
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const henry = new CJbot({
 | 
					 | 
				
			||||||
	host: conf.mc.server,
 | 
					 | 
				
			||||||
	autoConnect: false,
 | 
					 | 
				
			||||||
	__autoReConnect: false,
 | 
					 | 
				
			||||||
	...conf.mc.bots.henry
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const nova = new CJbot({
 | 
					 | 
				
			||||||
	host: conf.mc.server,
 | 
					 | 
				
			||||||
	autoConnect: false,
 | 
					 | 
				
			||||||
	__autoReConnect: false,
 | 
					 | 
				
			||||||
	...conf.mc.bots.nova
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const owen = new CJbot({
 | 
					 | 
				
			||||||
	host: conf.mc.server,
 | 
					 | 
				
			||||||
	autoConnect: false,
 | 
					 | 
				
			||||||
	__autoReConnect: false,
 | 
					 | 
				
			||||||
	...conf.mc.bots.owen
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const linda = new CJbot({
 | 
					 | 
				
			||||||
	host: conf.mc.server,
 | 
					 | 
				
			||||||
	autoConnect: false,
 | 
					 | 
				
			||||||
	__autoReConnect: false,
 | 
					 | 
				
			||||||
	...conf.mc.bots.linda
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const jimin = new CJbot({
 | 
					 | 
				
			||||||
	host: conf.mc.server,
 | 
					 | 
				
			||||||
	autoConnect: false,
 | 
					 | 
				
			||||||
	__autoReConnect: false,
 | 
					 | 
				
			||||||
	...conf.mc.bots.jimin
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const ez = new CJbot({
 | 
					 | 
				
			||||||
	host: conf.mc.server,
 | 
					 | 
				
			||||||
	autoConnect: false,
 | 
					 | 
				
			||||||
	__autoReConnect: false,
 | 
					 | 
				
			||||||
	...conf.mc.bots.ez
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {bot, henry, owen, linda, jimin, nova, ez};
 | 
					for(let name in conf.mc.bots){
 | 
				
			||||||
 | 
						if(CJbot.bots[name]) continue;
 | 
				
			||||||
 | 
						let bot = new CJbot({name, host: conf.mc.host, ...conf.mc.bots[name]});
 | 
				
			||||||
 | 
						CJbot.bots[name] = bot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for(let command of conf.mc.bots[name].commands || ['default']){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for(let [name, toAdd] of Object.entries(commands[command])){
 | 
				
			||||||
 | 
								bot.addCommand(name, toAdd)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(async ()=>{
 | 
				
			||||||
 | 
					try{
 | 
				
			||||||
 | 
						for(let name in CJbot.bots){
 | 
				
			||||||
 | 
							let bot = CJbot.bots[name];
 | 
				
			||||||
 | 
							if(bot.autoConnect){
 | 
				
			||||||
 | 
								console.log('Trying to connect', name)
 | 
				
			||||||
 | 
								console.log('Status for', name, await bot.connect());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								await sleep(30000);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}catch(e){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						console.log('!!!!!!!! error:', e)
 | 
				
			||||||
 | 
					}})()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// module.exports = {bot: ez, henry, owen, linda, jimin, nova, ez};
 | 
				
			||||||
 | 
				
			|||||||
@ -4,9 +4,49 @@ const axios = require('axios');
 | 
				
			|||||||
const {sleep} = require('../utils');
 | 
					const {sleep} = require('../utils');
 | 
				
			||||||
const conf = require('../conf');
 | 
					const conf = require('../conf');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const {bot, henry, owen, linda, jimin, nova, ez} = require('./mc-bot');
 | 
					 | 
				
			||||||
const pink_quotes = require('../model/pink_quotes')
 | 
					const pink_quotes = require('../model/pink_quotes')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let sites = {
 | 
				
			||||||
 | 
					    city: {
 | 
				
			||||||
 | 
					        bot: art,
 | 
				
			||||||
 | 
					        desc: 'Invite to the city',
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    core: {
 | 
				
			||||||
 | 
					        bot: nova,
 | 
				
			||||||
 | 
					        desc: `Get an invite to New Detroit.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    sb: {
 | 
				
			||||||
 | 
					        bot:owen,
 | 
				
			||||||
 | 
					        desc: `Get an invite to the Sky Base.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'owenshorts', 'VinceNL', 'Ethan63020', 'Ethan63021'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    fo: {
 | 
				
			||||||
 | 
					        bot: jimin,
 | 
				
			||||||
 | 
					        desc: `Get an invite to the Farming outpost.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    fo2: {
 | 
				
			||||||
 | 
					        bot:henry,
 | 
				
			||||||
 | 
					        desc: `Get an invite to the Farming outpost 2.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    german: {
 | 
				
			||||||
 | 
					        bot:linda,
 | 
				
			||||||
 | 
					        desc: `Get an invite you Germans area.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'owenshorts', 'VinceNL', 'Ethan63020', 'Ethan63021', 'pi_chef', 'YTMatze', 'mytzor'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    foend: {
 | 
				
			||||||
 | 
					        bot: ez,
 | 
				
			||||||
 | 
					        desc: `Get an invite to the Farming outpost in the end.`,
 | 
				
			||||||
 | 
					        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef'],
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log('HERERERER SITESSSS', sites)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let myAccounts = ['wmantly', 'useless666', 'tux4242']
 | 
					let myAccounts = ['wmantly', 'useless666', 'tux4242']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let germans = ['YTMatze', 'mytzor']
 | 
					let germans = ['YTMatze', 'mytzor']
 | 
				
			||||||
@ -36,13 +76,16 @@ let ballOptions = [
 | 
				
			|||||||
    "As I see it, yes.",
 | 
					    "As I see it, yes.",
 | 
				
			||||||
    "Most likely.",
 | 
					    "Most likely.",
 | 
				
			||||||
    "Outlook good.",
 | 
					    "Outlook good.",
 | 
				
			||||||
 | 
					    "The Core gods will it to be!",
 | 
				
			||||||
    "Yes.",
 | 
					    "Yes.",
 | 
				
			||||||
    "Signs point to yes.",
 | 
					    "Signs point to yes.",
 | 
				
			||||||
    "Reply hazy, try again.",
 | 
					    "Reply hazy, try again.",
 | 
				
			||||||
 | 
					    "You should ask Ethan",
 | 
				
			||||||
    "Ask again later.",
 | 
					    "Ask again later.",
 | 
				
			||||||
    "Better not tell you now.",
 | 
					    "Better not tell you now.",
 | 
				
			||||||
    "Cannot predict now.",
 | 
					    "Cannot predict now.",
 | 
				
			||||||
    "Concentrate and ask again.",
 | 
					    "Concentrate and ask again.",
 | 
				
			||||||
 | 
					    "You will find the answers during you journey to The Core!",
 | 
				
			||||||
    "Don't count on it.",
 | 
					    "Don't count on it.",
 | 
				
			||||||
    "My reply is no.",
 | 
					    "My reply is no.",
 | 
				
			||||||
    "My sources say no.",
 | 
					    "My sources say no.",
 | 
				
			||||||
@ -50,240 +93,218 @@ let ballOptions = [
 | 
				
			|||||||
    "Very doubtful.",
 | 
					    "Very doubtful.",
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let sites = {
 | 
					 | 
				
			||||||
    city: {
 | 
					 | 
				
			||||||
        bot: bot,
 | 
					 | 
				
			||||||
        desc: 'Invite to the city',
 | 
					 | 
				
			||||||
        allowed: townMemebers
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    nd: {
 | 
					 | 
				
			||||||
        bot: nova,
 | 
					 | 
				
			||||||
        desc: `Get an invite to New Detroit.`,
 | 
					 | 
				
			||||||
        allowed: townMemebers,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    sb: {
 | 
					 | 
				
			||||||
        bot:owen,
 | 
					 | 
				
			||||||
        desc: `Get an invite to the Sky Base.`,
 | 
					 | 
				
			||||||
        allowed: ['wmantly', 'useless666', 'tux4242', 'owenshorts', 'VinceNL', 'Ethan63020', 'Ethan63021'],
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    fo: {
 | 
					 | 
				
			||||||
        bot: jimin,
 | 
					 | 
				
			||||||
        desc: `Get an invite to the Farming outpost.`,
 | 
					 | 
				
			||||||
        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef'],
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    fo2: {
 | 
					 | 
				
			||||||
        bot:henry,
 | 
					 | 
				
			||||||
        desc: `Get an invite to the Farming outpost 2.`,
 | 
					 | 
				
			||||||
        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef'],
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    german: {
 | 
					 | 
				
			||||||
        bot:linda,
 | 
					 | 
				
			||||||
        desc: `Get an invite you Germans area.`,
 | 
					 | 
				
			||||||
        allowed: ['wmantly', 'useless666', 'tux4242', 'owenshorts', 'VinceNL', 'Ethan63020', 'Ethan63021', 'pi_chef', 'YTMatze', 'mytzor'],
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    foend: {
 | 
					 | 
				
			||||||
        bot: ez,
 | 
					 | 
				
			||||||
        desc: `Get an invite to the Farming outpost in the end.`,
 | 
					 | 
				
			||||||
        allowed: ['wmantly', 'useless666', 'tux4242', 'pi_chef'],
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const commands = {
 | 
				
			||||||
async function offSiteInvite(from, site){
 | 
					    '8ball':{
 | 
				
			||||||
    let offSiteBot = sites[site].bot
 | 
					        desc: `magic 8 Ball pick.`,
 | 
				
			||||||
    this.__unLockCommand();
 | 
					        async function(from){
 | 
				
			||||||
    await offSiteBot.connect();
 | 
					            await this.say(
 | 
				
			||||||
    await offSiteBot.bot.chat(`/invite ${from}`);
 | 
					                `> The 8 Ball says...`,
 | 
				
			||||||
    await this.whisper(from, `accept invite from ${offSiteBot.bot.entity.username} within 10 seconds...`)
 | 
					                `> ${ballOptions[Math.floor(Math.random()*ballOptions.length)]}`
 | 
				
			||||||
    let clear = setTimeout(()=>offSiteBot.quit(), 10000)
 | 
					            );
 | 
				
			||||||
    offSiteBot.on('message', (message) =>{
 | 
					 | 
				
			||||||
        if(message.toString() === `${from} teleported to you.`){
 | 
					 | 
				
			||||||
            offSiteBot.quit();
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    })
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand('inv', {
 | 
					
 | 
				
			||||||
    desc: `Have bot invite you to its position.`,
 | 
					
 | 
				
			||||||
    allowed: townMemebers,
 | 
					// async function offSiteInvite(from, site){
 | 
				
			||||||
    async function(from, site){
 | 
					//     let offSiteBot = sites[site].bot
 | 
				
			||||||
        await this.say(`/invite ${from}`);
 | 
					//     this.__unLockCommand();
 | 
				
			||||||
    }
 | 
					
 | 
				
			||||||
});
 | 
					
 | 
				
			||||||
 | 
					//     await offSiteBot.connect();
 | 
				
			||||||
 | 
					//     await offSiteBot.bot.chat(`/invite ${from}`);
 | 
				
			||||||
 | 
					//     await this.whisper(from, `accept invite from ${offSiteBot.bot.entity.username} within 10 seconds...`)
 | 
				
			||||||
 | 
					//     let clear = setTimeout(()=>offSiteBot.quit(), 10000)
 | 
				
			||||||
 | 
					//     offSiteBot.on('message', (message) =>{
 | 
				
			||||||
 | 
					//         if(message.toString() === `${from} teleported to you.`){
 | 
				
			||||||
 | 
					//             offSiteBot.quit();
 | 
				
			||||||
 | 
					//         }
 | 
				
			||||||
 | 
					//     })
 | 
				
			||||||
 | 
					// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// bot.addCommand('inv', {
 | 
				
			||||||
 | 
					//     desc: `Have bot invite you to its position.`,
 | 
				
			||||||
 | 
					//     allowed: townMemebers,
 | 
				
			||||||
 | 
					//     async function(from, site){
 | 
				
			||||||
 | 
					//         if(getSiteFromBot(this.name).allowed.includes(from) await this.say(`/invite ${from}`);
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log('sites,', sites)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for(const [name, site] of Object.entries(sites)){
 | 
					for(const [name, site] of Object.entries(sites)){
 | 
				
			||||||
    bot.addCommand(`inv-${name}`, {
 | 
					    console.log('site', name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    commands[`inv-${name}`] = {
 | 
				
			||||||
        ...site,
 | 
					        ...site,
 | 
				
			||||||
        ignoreLock: true,
 | 
					        ignoreLock: true,
 | 
				
			||||||
        async function(from){
 | 
					        async function(from){
 | 
				
			||||||
            this.__unLockCommand();
 | 
					            this.__unLockCommand();
 | 
				
			||||||
            await site.bot.connect();
 | 
					
 | 
				
			||||||
 | 
					            if(!site.bit.isReady){
 | 
				
			||||||
 | 
					                await site.bot.connect();
 | 
				
			||||||
 | 
					                var clear = setTimeout(()=>site.bot.quit(), 10000);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            await site.bot.bot.chat(`/invite ${from}`);
 | 
					            await site.bot.bot.chat(`/invite ${from}`);
 | 
				
			||||||
            await this.whisper(from, `accept invite from ${site.bot.bot.entity.username} within 10 seconds...`)
 | 
					            await this.whisper(from, `accept invite from ${site.bot.bot.entity.username} within 10 seconds...`)
 | 
				
			||||||
            let clear = setTimeout(()=>site.bot.quit(), 10000)
 | 
					 | 
				
			||||||
            site.bot.on('message', (message) =>{
 | 
					            site.bot.on('message', (message) =>{
 | 
				
			||||||
                if(message.toString() === `${from} teleported to you.`){
 | 
					                if(message.toString() === `${from} teleported to you.`){
 | 
				
			||||||
                    site.bot.quit();
 | 
					                    if(clear){
 | 
				
			||||||
 | 
					                        clearTimeout(clear);
 | 
				
			||||||
 | 
					                        site.bot.quit();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            })
 | 
					            })
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    })
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand('.invite', {
 | 
					// bot.addCommand('.invite', {
 | 
				
			||||||
	desc: `The bot will /accept an /invite from you.`,
 | 
					// 	desc: `The bot will /accept an /invite from you.`,
 | 
				
			||||||
	allowed: ['wmantly', 'useless666', 'tux4242', 'owenshorts', 'BobinaBlu', 'pi_chef'],
 | 
					// 	allowed: ['wmantly', 'useless666', 'tux4242', 'owenshorts', 'BobinaBlu', 'pi_chef'],
 | 
				
			||||||
	async function(from){
 | 
					// 	async function(from){
 | 
				
			||||||
		await this.whisper('Coming');
 | 
					// 		await this.whisper('Coming');
 | 
				
			||||||
		await this.say(`/accept`);
 | 
					// 		await this.say(`/accept`);
 | 
				
			||||||
	}
 | 
					// 	}
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand('say', {
 | 
					// bot.addCommand('say', {
 | 
				
			||||||
    desc: `Make bot say stuff.`,
 | 
					//     desc: `Make bot say stuff.`,
 | 
				
			||||||
    allowed: ['wmantlys', 'useless666', 'tux4242'],
 | 
					//     allowed: ['wmantlys', 'useless666', 'tux4242'],
 | 
				
			||||||
    ignoreLock: true,
 | 
					//     ignoreLock: true,
 | 
				
			||||||
    async function(from, ...messages){
 | 
					//     async function(from, ...messages){
 | 
				
			||||||
        await this.say((messages || []).join(' '));
 | 
					//         await this.say((messages || []).join(' '));
 | 
				
			||||||
    }
 | 
					//     }
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand("joke", {
 | 
					// bot.addCommand("joke", {
 | 
				
			||||||
    desc: "Tells a random joke.",
 | 
					//     desc: "Tells a random joke.",
 | 
				
			||||||
    async function(from){
 | 
					//     async function(from){
 | 
				
			||||||
        await this.say('> Let me think...');
 | 
					//         await this.say('> Let me think...');
 | 
				
			||||||
        let res = await axios.get('https://v2.jokeapi.dev/joke/Any?type=single')
 | 
					//         let res = await axios.get('https://v2.jokeapi.dev/joke/Any?type=single')
 | 
				
			||||||
        await this.say(...res.data.joke.split('\n').map(e => `> ${e}`));
 | 
					//         await this.say(...res.data.joke.split('\n').map(e => `> ${e}`));
 | 
				
			||||||
    },
 | 
					//     },
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand("quote", {
 | 
					// bot.addCommand("quote", {
 | 
				
			||||||
    desc: 'Say an inspirational quote.',
 | 
					//     desc: 'Say an inspirational quote.',
 | 
				
			||||||
    async function(from){
 | 
					//     async function(from){
 | 
				
			||||||
        await this.say('> Right away!');
 | 
					//         await this.say('> Right away!');
 | 
				
			||||||
        let res = await axios.get('https://zenquotes.io/api/random')
 | 
					//         let res = await axios.get('https://zenquotes.io/api/random')
 | 
				
			||||||
        await this.say(`> ${res.data[0].q} -- ${res.data[0].a}`);
 | 
					//         await this.say(`> ${res.data[0].q} -- ${res.data[0].a}`);
 | 
				
			||||||
    }
 | 
					//     }
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand('west-quote', { 
 | 
					// bot.addCommand('west-quote', { 
 | 
				
			||||||
    desc: `Say a random Kanye West quote.`,
 | 
					//     desc: `Say a random Kanye West quote.`,
 | 
				
			||||||
    async function(from) {
 | 
					//     async function(from) {
 | 
				
			||||||
        await this.say('> And here we go!');
 | 
					//         await this.say('> And here we go!');
 | 
				
			||||||
        let res = await axios.get('https://api.kanye.rest/');
 | 
					//         let res = await axios.get('https://api.kanye.rest/');
 | 
				
			||||||
        await this.say(`> ${res.data.quote} -- Kanye West`);
 | 
					//         await this.say(`> ${res.data.quote} -- Kanye West`);
 | 
				
			||||||
    }
 | 
					//     }
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand('pink-quote', { 
 | 
					// bot.addCommand('pink-quote', { 
 | 
				
			||||||
    desc: `Say a random Pink Floyd quote.`,
 | 
					//     desc: `Say a random Pink Floyd quote.`,
 | 
				
			||||||
    async function(from) {
 | 
					//     async function(from) {
 | 
				
			||||||
        await this.say(
 | 
					//         await this.say(
 | 
				
			||||||
            `> Rock 'n' Roll`,
 | 
					//             `> Rock 'n' Roll`,
 | 
				
			||||||
            `> ${pink_quotes[Math.floor(Math.random()*pink_quotes.length)]} -- Pink Floyd`
 | 
					//             `> ${pink_quotes[Math.floor(Math.random()*pink_quotes.length)]} -- Pink Floyd`
 | 
				
			||||||
        );        
 | 
					//         );        
 | 
				
			||||||
    }
 | 
					//     }
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand("fact", {
 | 
					// bot.addCommand("fact", {
 | 
				
			||||||
    desc: `Say a random fact.`,
 | 
					//     desc: `Say a random fact.`,
 | 
				
			||||||
    async function(from){
 | 
					//     async function(from){
 | 
				
			||||||
        await this.say('> The internet says this is true?');
 | 
					//         await this.say('> The internet says this is true?');
 | 
				
			||||||
        let res = await axios.get('https://uselessfacts.jsph.pl/random.json?language=en')
 | 
					//         let res = await axios.get('https://uselessfacts.jsph.pl/random.json?language=en')
 | 
				
			||||||
        await this.say(
 | 
					//         await this.say(
 | 
				
			||||||
            `> ${res.data.text}`,
 | 
					//             `> ${res.data.text}`,
 | 
				
			||||||
            `> source: ${res.data.source}`
 | 
					//             `> source: ${res.data.source}`
 | 
				
			||||||
        );
 | 
					//         );
 | 
				
			||||||
    }
 | 
					//     }
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand("advice", { 
 | 
					// bot.addCommand("advice", { 
 | 
				
			||||||
    desc: `Say some random advice.`,
 | 
					//     desc: `Say some random advice.`,
 | 
				
			||||||
    async function(from){
 | 
					//     async function(from){
 | 
				
			||||||
        await this.say('> Try this:');
 | 
					//         await this.say('> Try this:');
 | 
				
			||||||
        let res = await axios.get('https://api.adviceslip.com/advice');
 | 
					//         let res = await axios.get('https://api.adviceslip.com/advice');
 | 
				
			||||||
        await this.say(`> ${res.data.slip.advice}`);
 | 
					//         await this.say(`> ${res.data.slip.advice}`);
 | 
				
			||||||
    }
 | 
					//     }
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand('idea', {
 | 
					// bot.addCommand('idea', {
 | 
				
			||||||
    desc: `Say a random start up idea.`,
 | 
					//     desc: `Say a random start up idea.`,
 | 
				
			||||||
    async function(from){
 | 
					//     async function(from){
 | 
				
			||||||
        await this.say('> How about?');
 | 
					//         await this.say('> How about?');
 | 
				
			||||||
        let res = await axios.get('https://itsthisforthis.com/api.php?text')
 | 
					//         let res = await axios.get('https://itsthisforthis.com/api.php?text')
 | 
				
			||||||
        await this.say(`> ${res.data}`);
 | 
					//         await this.say(`> ${res.data}`);
 | 
				
			||||||
    }
 | 
					//     }
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand('discord', {
 | 
					// bot.addCommand('discord', {
 | 
				
			||||||
    desc: `Say the CJ discord invite link.`,
 | 
					//     desc: `Say the CJ discord invite link.`,
 | 
				
			||||||
    async function(from) {
 | 
					//     async function(from) {
 | 
				
			||||||
        await this.say('https://discord.gg/hyby9m8');
 | 
					//         await this.say('https://discord.gg/hyby9m8');
 | 
				
			||||||
    }
 | 
					//     }
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand('8ball',{
 | 
					// bot.addCommand('dice',{
 | 
				
			||||||
    desc: `magic 8 Ball pick.`,
 | 
					//     desc: `Roll a die. You can state the max size on the dice. Default is 6.`,
 | 
				
			||||||
    async function(from){
 | 
					//     async function(from, size){
 | 
				
			||||||
        await this.say(
 | 
					//         size = size || 6;
 | 
				
			||||||
            `> The 8 Ball says...`,
 | 
					//         if(!Number.isInteger(Number(size))){
 | 
				
			||||||
            `> ${ballOptions[Math.floor(Math.random()*ballOptions.length)]}`
 | 
					//             this.whisper(from, `${size} is not a whole number...`)
 | 
				
			||||||
        );
 | 
					//             return ;
 | 
				
			||||||
    }
 | 
					//         }
 | 
				
			||||||
});
 | 
					//         await this.say(
 | 
				
			||||||
 | 
					//             `> Rolling a dice for ${from}`,
 | 
				
			||||||
 | 
					//             `> ${Math.floor(Math.random()*size)+1}`
 | 
				
			||||||
 | 
					//         );
 | 
				
			||||||
 | 
					//     }
 | 
				
			||||||
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand('dice',{
 | 
					// bot.addCommand('random-player', {
 | 
				
			||||||
    desc: `Roll a die. You can state the max size on the dice. Default is 6.`,
 | 
					//     desc: `Return a random online player.`,
 | 
				
			||||||
    async function(from, size){
 | 
					//     async function(from){
 | 
				
			||||||
        size = size || 6;
 | 
					//         let players = bot.getPlayers()
 | 
				
			||||||
        if(!Number.isInteger(Number(size))){
 | 
					 | 
				
			||||||
            this.whisper(from, `${size} is not a whole number...`)
 | 
					 | 
				
			||||||
            return ;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        await this.say(
 | 
					 | 
				
			||||||
            `> Rolling a dice for ${from}`,
 | 
					 | 
				
			||||||
            `> ${Math.floor(Math.random()*size)+1}`
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bot.addCommand('random-player', {
 | 
					 | 
				
			||||||
    desc: `Return a random online player.`,
 | 
					 | 
				
			||||||
    async function(from){
 | 
					 | 
				
			||||||
        let players = bot.getPlayers()
 | 
					 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        delete players[bot.bot.entity.username]
 | 
					//         delete players[bot.bot.entity.username]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let keys = Object.keys(players);
 | 
					//         let keys = Object.keys(players);
 | 
				
			||||||
        let player = players[keys[ keys.length * Math.random() << 0]];
 | 
					//         let player = players[keys[ keys.length * Math.random() << 0]];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        await this.say(`> I pick [${player.lvl}]${player.username}`)
 | 
					//         await this.say(`> I pick [${player.lvl}]${player.username}`)
 | 
				
			||||||
    }
 | 
					//     }
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand('flip', {
 | 
					// bot.addCommand('flip', {
 | 
				
			||||||
    desc: `Flip a coin.`,
 | 
					//     desc: `Flip a coin.`,
 | 
				
			||||||
    async function(from){
 | 
					//     async function(from){
 | 
				
			||||||
        await this.say(
 | 
					//         await this.say(
 | 
				
			||||||
            `> Flipping a coin for ${from}`,
 | 
					//             `> Flipping a coin for ${from}`,
 | 
				
			||||||
            `> ${!!(Math.floor(Math.random() * (3000 - 1500) + 1500)%2) ? "Heads" : "Tails"}`
 | 
					//             `> ${!!(Math.floor(Math.random() * (3000 - 1500) + 1500)%2) ? "Heads" : "Tails"}`
 | 
				
			||||||
        );
 | 
					//         );
 | 
				
			||||||
    }
 | 
					//     }
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bot.addCommand('help', {
 | 
					// bot.addCommand('help', {
 | 
				
			||||||
    desc: `Print the allowed commands.`,
 | 
					//     desc: `Print the allowed commands.`,
 | 
				
			||||||
    async function(from){
 | 
					//     async function(from){
 | 
				
			||||||
        console.log('called help', from)
 | 
					//         console.log('called help', from)
 | 
				
			||||||
        let intro = [
 | 
					//         let intro = [
 | 
				
			||||||
            'I am a bot owned and operated by',
 | 
					//             'I am a bot owned and operated by',
 | 
				
			||||||
            'wmantly <wmantly@gmail.com>',
 | 
					//             'wmantly <wmantly@gmail.com>',
 | 
				
			||||||
            'You have access to the following commands:'
 | 
					//             'You have access to the following commands:'
 | 
				
			||||||
        ]
 | 
					//         ]
 | 
				
			||||||
        await this.whisper(from, ...intro, ...this.__reduceCommands(from).map(command =>
 | 
					//         await this.whisper(from, ...intro, ...this.__reduceCommands(from).map(command =>
 | 
				
			||||||
            `${command} -- ${this.commands[command].desc || ''}`
 | 
					//             `${command} -- ${this.commands[command].desc || ''}`
 | 
				
			||||||
        ));
 | 
					//         ));
 | 
				
			||||||
    }
 | 
					//     }
 | 
				
			||||||
});
 | 
					// });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {bot};
 | 
					module.exports = commands;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
'use strict';
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const botController = require('./controller/mc-bot');
 | 
					const botController = require('./controller/mc-bot');
 | 
				
			||||||
const chatController = require('./controller/mc-chatbot');
 | 
					// const chatController = require('./controller/mc-chatbot');
 | 
				
			||||||
// const actionController = require('./controller/mc-actionbot');
 | 
					// const actionController = require('./controller/mc-actionbot');
 | 
				
			||||||
@ -15,28 +15,38 @@ class CJbot{
 | 
				
			|||||||
	combatTag = false;
 | 
						combatTag = false;
 | 
				
			||||||
	doLogOut = false;
 | 
						doLogOut = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static bots = {};
 | 
				
			||||||
 | 
						static __addLock = false;
 | 
				
			||||||
 | 
						static __toConnect = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	constructor(args){
 | 
						constructor(args){
 | 
				
			||||||
 | 
							this.name = args.name;
 | 
				
			||||||
		this.username = args.username;
 | 
							this.username = args.username;
 | 
				
			||||||
		this.password = args.password;
 | 
							this.password = args.password;
 | 
				
			||||||
		this.host = args.host;
 | 
							this.host = args.host;
 | 
				
			||||||
		this.auth = args.auth || 'microsoft';
 | 
							this.auth = args.auth || 'microsoft';
 | 
				
			||||||
		this.version = args.version || '1.18.2';
 | 
							this.version = args.version || '1.19.2';
 | 
				
			||||||
		this.autoReConnect = 'autoConnect' in args ? args.autoReConnect : true;
 | 
							this.autoReConnect = 'autoConnect' in args ? args.autoReConnect : true;
 | 
				
			||||||
		this.autoConnect = 'autoConnect' in args  ? args.autoConnect : true;
 | 
							this.autoConnect = 'autoConnect' in args  ? args.autoConnect : true;
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
		if(this.autoConnect){
 | 
					 | 
				
			||||||
			console.log('connecting', this.username, this.autoConnect)
 | 
					 | 
				
			||||||
			this.connect();
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if(this.autoReConnect){
 | 
					 | 
				
			||||||
			this.__autoReConnect()
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if(this.autoReConnect) this.__autoReConnect()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	connect(){
 | 
						connect(){
 | 
				
			||||||
		return new Promise((resolve, reject) =>{
 | 
							return new Promise((resolve, reject) =>{
 | 
				
			||||||
 | 
								// let cancle = setTimeout(()=>{
 | 
				
			||||||
 | 
								// 	reject('TimeOut')
 | 
				
			||||||
 | 
								// }, 10000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// resolve = (...args)=>{
 | 
				
			||||||
 | 
								// 	clearTimeout(cancle);
 | 
				
			||||||
 | 
								// 	return resolve(...args);
 | 
				
			||||||
 | 
								// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// reject = (...args)=>{
 | 
				
			||||||
 | 
								// 	// clearTimeout(cancle);
 | 
				
			||||||
 | 
								// 	return reject(...args);
 | 
				
			||||||
 | 
								// }
 | 
				
			||||||
			this.bot = mineflayer.createBot({
 | 
								this.bot = mineflayer.createBot({
 | 
				
			||||||
				host: this.host,
 | 
									host: this.host,
 | 
				
			||||||
				username: this.username,
 | 
									username: this.username,
 | 
				
			||||||
@ -51,29 +61,36 @@ class CJbot{
 | 
				
			|||||||
				reject(m)
 | 
									reject(m)
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								this.bot.on('end', (m)=>{
 | 
				
			||||||
			this.bot.on('end', reason =>{
 | 
									console.log(this.name, 'Connection ended:', m);
 | 
				
			||||||
					console.log('Connection ended:', reason)
 | 
									this.isReady = false;
 | 
				
			||||||
					this.isReady = false
 | 
									reject(m);
 | 
				
			||||||
				}
 | 
								});
 | 
				
			||||||
			);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.bot.on('login', ()=>{
 | 
								this.bot.on('login', ()=>{
 | 
				
			||||||
				this.__onReady()
 | 
									this.__onReady()
 | 
				
			||||||
				resolve()
 | 
									resolve()
 | 
				
			||||||
			});
 | 
								});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								setTimeout(async ()=>{try{
 | 
				
			||||||
 | 
									if(this.autoReConnect && !this.isReady) await this.connect();
 | 
				
			||||||
 | 
								}catch(error){
 | 
				
			||||||
 | 
									console.error('minecraft.js/connect/setTimeout/', this.name, ' ', error)
 | 
				
			||||||
 | 
								}}, 30000);
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	once(event){
 | 
						once(event){
 | 
				
			||||||
		return new Promise((resolve, reject)=> this.bot.once(event, resolve));
 | 
							return new Promise((resolve, reject)=> this.bot.once(event, resolve));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	async __onReady(){
 | 
						async __onReady(){try{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		this.__startListeners();
 | 
							this.__startListeners();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		console.log('listeners', this.listeners.onReady)
 | 
							// console.log('listeners', this.listeners.onReady)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for(let callback of this.listeners.onReady || []){
 | 
							for(let callback of this.listeners.onReady || []){
 | 
				
			||||||
			console.log('calling listener', callback)
 | 
								console.log('calling listener', callback)
 | 
				
			||||||
@ -86,7 +103,10 @@ class CJbot{
 | 
				
			|||||||
		
 | 
							
 | 
				
			||||||
		// Start chat listeners
 | 
							// Start chat listeners
 | 
				
			||||||
		this.__listen();
 | 
							this.__listen();
 | 
				
			||||||
	}
 | 
						
 | 
				
			||||||
 | 
						}catch(error){
 | 
				
			||||||
 | 
							console.error('minecraft.js/__onReady/', this.name, ' ', error)
 | 
				
			||||||
 | 
						}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	__startListeners(){
 | 
						__startListeners(){
 | 
				
			||||||
@ -111,37 +131,34 @@ class CJbot{
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	__autoReConnect(){
 | 
						__autoReConnect(){
 | 
				
			||||||
		console.log('auto connect function')
 | 
							try{
 | 
				
			||||||
		this.on('end', (reason)=>{
 | 
								console.log('auto connect function')
 | 
				
			||||||
			console.error('MC on end', reason)
 | 
								this.on('end', async (reason)=>{
 | 
				
			||||||
 | 
									console.error('_autorestart MC on end', reason)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									await sleep('30000')
 | 
				
			||||||
 | 
									this.connect()
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.connect()
 | 
								this.on('kick', console.error)
 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		this.bot.on('kick', console.error)
 | 
								this.on('error', (error)=>{
 | 
				
			||||||
 | 
									console.error('MC on error', error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		this.on('error', (error)=>{
 | 
									this.connect();
 | 
				
			||||||
			console.error('MC on error', error);
 | 
								});
 | 
				
			||||||
 | 
							}catch(error){
 | 
				
			||||||
 | 
								console.error('error in __autoReConnect', error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			this.connect();
 | 
							}
 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	__error(){
 | 
						__error(message){
 | 
				
			||||||
		this.bot.on('error', (error)=>{
 | 
							this.bot.on('error', (error)=>{
 | 
				
			||||||
			console.error(`ERROR!!! MC bot ${this.username} on ${this.host} had an error:\n`, error)
 | 
								console.error(`ERROR!!! MC bot ${this.username} on ${this.host} had an error:\n`, error)
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	getPlayers(){
 | 
					 | 
				
			||||||
		for (let [username, value] of Object.entries(this.bot.players)){
 | 
					 | 
				
			||||||
			value.lvl = Number(value.displayName.extra[0].text)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return this.bot.players;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Chat and messaging*/
 | 
						/* Chat and messaging*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -200,10 +217,10 @@ class CJbot{
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	quit(force){
 | 
						quit(force){
 | 
				
			||||||
		if(!this.combatTag){
 | 
							if(!this.combatTag || force){
 | 
				
			||||||
			this.bot.quit();
 | 
								this.bot.quit();
 | 
				
			||||||
		}else{
 | 
							}else{
 | 
				
			||||||
			console.log('stoped logout due to combatTag')
 | 
								console.log('Logout prevented due to combatTag');
 | 
				
			||||||
			this.doLogOut = true;
 | 
								this.doLogOut = true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -241,7 +258,7 @@ class CJbot{
 | 
				
			|||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	async __doCommand(from, command){
 | 
						async __doCommand(from, command){try{
 | 
				
			||||||
		if(this.commandLock){
 | 
							if(this.commandLock){
 | 
				
			||||||
			this.whisper(from, `cool down, try again in ${this.commandCollDownTime/1000} seconds...`);
 | 
								this.whisper(from, `cool down, try again in ${this.commandCollDownTime/1000} seconds...`);
 | 
				
			||||||
			return ;
 | 
								return ;
 | 
				
			||||||
@ -261,12 +278,23 @@ class CJbot{
 | 
				
			|||||||
		}else{
 | 
							}else{
 | 
				
			||||||
			this.whisper(from, `I dont know anything about ${cmd}`);
 | 
								this.whisper(from, `I dont know anything about ${cmd}`);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}catch(error){
 | 
				
			||||||
 | 
							console.error('minecraft.js/__doCommand/', this.name, ' ', error)
 | 
				
			||||||
 | 
						}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	addCommand(name, obj){
 | 
						addCommand(name, obj){
 | 
				
			||||||
		if(this.commands[name]) return false;
 | 
							if(this.commands[name]) return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		this.commands[name] = obj;
 | 
							this.commands[name] = obj;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						getPlayers(){
 | 
				
			||||||
 | 
							for (let [username, value] of Object.entries(this.bot.players)){
 | 
				
			||||||
 | 
								value.lvl = Number(value.displayName.extra[0].text)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return this.bot.players;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {CJbot};
 | 
					module.exports = {CJbot};
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										635
									
								
								nodejs/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										635
									
								
								nodejs/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -21,7 +21,7 @@
 | 
				
			|||||||
    "dotenv": "^16.0.1",
 | 
					    "dotenv": "^16.0.1",
 | 
				
			||||||
    "extend": "^3.0.2",
 | 
					    "extend": "^3.0.2",
 | 
				
			||||||
    "minecraft-data": "^3.5.0",
 | 
					    "minecraft-data": "^3.5.0",
 | 
				
			||||||
    "mineflayer": "^4.3.0",
 | 
					    "mineflayer": "^4.8.0",
 | 
				
			||||||
    "mineflayer-auto-eat": "^2.3.3",
 | 
					    "mineflayer-auto-eat": "^2.3.3",
 | 
				
			||||||
    "mineflayer-pathfinder": "^2.2.0",
 | 
					    "mineflayer-pathfinder": "^2.2.0",
 | 
				
			||||||
    "mineflayer-web-inventory": "^1.8.3",
 | 
					    "mineflayer-web-inventory": "^1.8.3",
 | 
				
			||||||
@ -29,6 +29,6 @@
 | 
				
			|||||||
    "prismarine-windows": "^2.4.4"
 | 
					    "prismarine-windows": "^2.4.4"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "nodemon": "^2.0.18"
 | 
					    "nodemon": "^2.0.22"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user