Compare commits
27 commits
06b1e28490
...
b950a12be3
Author | SHA1 | Date | |
---|---|---|---|
b950a12be3 | |||
3e31b2f4f3 | |||
|
f5b85902b6 | ||
|
ae073d4177 | ||
|
77e260c128 | ||
|
5e15d32ccd | ||
|
d1993a6bc1 | ||
|
df5e56ffe0 | ||
|
ed53c4ac38 | ||
|
9dec12f1bb | ||
|
7d89c2e2b3 | ||
|
7442900bcb | ||
|
157bfc890f | ||
|
fa1b9820bc | ||
|
13a905e08c | ||
|
0976f6d4b2 | ||
|
f7b21b41f4 | ||
|
25173b5689 | ||
|
5b90ad7954 | ||
|
1d57af5993 | ||
|
183c388f00 | ||
|
b30a0a21b9 | ||
|
f8ee6905c2 | ||
|
73f0a9d262 | ||
|
6eca4f3c64 | ||
|
0b1f3634c4 | ||
|
00966b2913 |
30 changed files with 440 additions and 708 deletions
|
@ -2,13 +2,17 @@
|
|||
|
||||
## What is it?
|
||||
|
||||
botvX is a Minecraft bot originally designed for [Kaboom](https://kaboom.pw/) and its clones. It has many of the features that you would expect in a modern Kaboom bot:
|
||||
botvX is a Minecraft bot for [Kaboom](https://kaboom.pw/) and its clones. It has many of the features that you would expect in a modern Kaboom bot:
|
||||
|
||||
- commands (obviously)
|
||||
- a self care system
|
||||
- a command core, to run commands quickly
|
||||
- a hashing system, to enable trusted users to securely run certain commands in chat
|
||||
|
||||
## What does "botvX" mean?
|
||||
|
||||
"botvX" means "bot version 10". The v is used to signify that whatever after it is a version, as was done with previous versions (botv4, botv6, botv8, botv9), and the X is the Roman numeral for 10, since this is the 10th major version.
|
||||
|
||||
## How to install?
|
||||
|
||||
1. Install [Node.js](https://nodejs.org/) for your operating system.
|
||||
|
|
|
@ -4,7 +4,6 @@ const { getMessage, formatTime } = require('../util/lang.js')
|
|||
const fs = require('fs')
|
||||
const botVersion = require('../util/version.js')
|
||||
const version = require('../version.json')
|
||||
const index = require('../index.js')
|
||||
|
||||
const aboutBot = function (c) {
|
||||
c.reply({
|
||||
|
@ -56,13 +55,13 @@ const aboutBot = function (c) {
|
|||
const os2 = function (o2, l) {
|
||||
switch (o2) {
|
||||
case 'win32':
|
||||
return `${os.version()}`
|
||||
return `${os.version()} (${os.release})`
|
||||
case 'android':{
|
||||
try {
|
||||
const version = cp.execSync('getprop ro.build.version.release').toString('UTF-8').split('\n')[0]
|
||||
return getMessage(l, 'command.about.serverInfo.os.android', [version])
|
||||
} catch (e) {
|
||||
return getMessage(l, 'command.about.serverInfo.os.android.noVersion')
|
||||
getMessage(l, 'command.about.serverInfo.os.android.noVersion')
|
||||
}
|
||||
}
|
||||
case 'linux':
|
||||
|
@ -70,20 +69,20 @@ const os2 = function (o2, l) {
|
|||
if (fs.readdirSync('/etc').includes('os-release')) {
|
||||
const osrelease = fs.readFileSync('/etc/os-release').toString('UTF-8').split('\n')
|
||||
const osrelease2 = {}
|
||||
for (const item of osrelease) {
|
||||
if (!item.includes('=')) continue
|
||||
let osrvalue = item.split('=')[1]
|
||||
for (const i in osrelease) {
|
||||
if (!osrelease[i].includes('=')) continue
|
||||
let osrvalue = osrelease[i].split('=')[1]
|
||||
if (osrvalue.startsWith('"') && osrvalue.endsWith('"')) { osrvalue = osrvalue.slice(1, osrvalue.length - 1) };
|
||||
osrelease2[item.split('=')[0]] = osrvalue
|
||||
osrelease2[osrelease[i].split('=')[0]] = osrvalue
|
||||
}
|
||||
|
||||
if (osrelease2.PRETTY_NAME) {
|
||||
return getMessage(l, '%s', [osrelease2.PRETTY_NAME])
|
||||
return getMessage(l, '%s %s', [osrelease2.PRETTY_NAME, os.release()])
|
||||
} else {
|
||||
return getMessage(l, `command.about.serverInfo.os.${o2}`)
|
||||
return getMessage(l, `command.about.serverInfo.os.${o2}`, [os.release()])
|
||||
}
|
||||
} else {
|
||||
return getMessage(l, `command.about.serverInfo.os.${o2}`)
|
||||
return getMessage(l, `command.about.serverInfo.os.${o2}`, [os.release()])
|
||||
}
|
||||
}
|
||||
default:
|
||||
|
@ -121,11 +120,6 @@ const aboutServer = function (c) {
|
|||
return os2(process.platform, c.lang)
|
||||
})
|
||||
|
||||
// Kernel version: os.release()
|
||||
displayInfo('command.about.serverInfo.kernelVer', () => {
|
||||
return os.release()
|
||||
})
|
||||
|
||||
// Processor
|
||||
if (os.cpus()[0]) {
|
||||
displayInfo('command.about.serverInfo.processor', () => {
|
||||
|
@ -184,33 +178,10 @@ const aboutServer = function (c) {
|
|||
return botVersion
|
||||
})
|
||||
}
|
||||
|
||||
const displayServerList = function (c) {
|
||||
index.bot.forEach((item, i)=>{
|
||||
if (item.host.options && item.host.options.hidden) return
|
||||
c.reply({
|
||||
translate: getMessage(c.lang, 'command.about.serverListItem'),
|
||||
color: c.colors.secondary,
|
||||
with: [
|
||||
{
|
||||
text: i.toString(),
|
||||
color: c.colors.primary
|
||||
},
|
||||
{
|
||||
text: `${item.host.host}:${item.host.port}`,
|
||||
color: c.colors.primary
|
||||
}
|
||||
]
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
execute: function (c) {
|
||||
if (c.args[0] === 'server') {
|
||||
aboutServer(c)
|
||||
} else if (c.args[0] === 'serverlist') {
|
||||
displayServerList(c)
|
||||
} else {
|
||||
aboutBot(c)
|
||||
}
|
||||
|
|
|
@ -44,26 +44,26 @@ module.exports = {
|
|||
break
|
||||
}
|
||||
case 'list':
|
||||
c.bot.cloops.forEach((item, i)=>{
|
||||
for (const i in c.bot.cloops) {
|
||||
c.reply({
|
||||
translate: getMessage(c.lang, 'command.cloop.list'),
|
||||
color: c.colors.secondary,
|
||||
with: [
|
||||
{
|
||||
text: i.toString(),
|
||||
text: i,
|
||||
color: c.colors.primary
|
||||
},
|
||||
{
|
||||
text: item.command,
|
||||
text: c.bot.cloops[i].command,
|
||||
color: c.colors.primary
|
||||
},
|
||||
{
|
||||
text: item.rate + '',
|
||||
text: c.bot.cloops[i].rate + '',
|
||||
color: c.colors.primary
|
||||
}
|
||||
]
|
||||
})
|
||||
})
|
||||
}
|
||||
break
|
||||
case 'clear':
|
||||
c.bot.clearCloops()
|
||||
|
|
|
@ -9,14 +9,14 @@ const sortHelp = function sortHelp (c1, c2) {
|
|||
}
|
||||
|
||||
const bpl = fs.readdirSync('./commands')
|
||||
for (const plugin of bpl) {
|
||||
if (!plugin.endsWith('.js')) {
|
||||
for (const i in bpl) { // Built-in loadCMD to the help command, to prevent circular require
|
||||
if (!bpl[i].endsWith('.js')) {
|
||||
continue
|
||||
}
|
||||
try {
|
||||
const commandName = plugin.split('.js')[0]
|
||||
const commandName = bpl[i].split('.js')[0]
|
||||
if (commandName !== 'help') {
|
||||
cmds[commandName] = require(`./${plugin}`)
|
||||
cmds[commandName] = require(`./${bpl[i]}`)
|
||||
if (cmds[commandName].level === undefined) {
|
||||
cmds[commandName].level = 0
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ const printCmdHelp = (c) => {
|
|||
desc = cmds[cmds[cmd].alias].desc
|
||||
}
|
||||
}
|
||||
for (const item of usage) {
|
||||
for (const i in usage) {
|
||||
c.reply({
|
||||
translate: getMessage(c.lang, 'command.help.commandUsage'),
|
||||
color: c.colors.secondary,
|
||||
|
@ -99,7 +99,7 @@ const printCmdHelp = (c) => {
|
|||
color: c.colors.primary
|
||||
},
|
||||
{
|
||||
text: item,
|
||||
text: usage[i],
|
||||
color: c.colors.primary
|
||||
}
|
||||
]
|
||||
|
@ -152,8 +152,8 @@ if (cmds.help.level === undefined) {
|
|||
|
||||
for (const i in cmds) {
|
||||
if (cmds[i].aliases) {
|
||||
for (const alias of cmds[commandName].aliases) {
|
||||
cmds[alias] = {
|
||||
for (const j in cmds[i].aliases) {
|
||||
cmds[cmds[i].aliases[j]] = {
|
||||
alias: i,
|
||||
usage: cmds[i].usage,
|
||||
level: cmds[i].level,
|
||||
|
|
|
@ -2,9 +2,9 @@ const { bot } = require('../index.js')
|
|||
const { getMessage } = require('../util/lang.js')
|
||||
module.exports = {
|
||||
execute: (c) => {
|
||||
if (c.bot.host && c.bot.host.options.hidden) {
|
||||
if(c.bot.host && c.bot.host.options.netmsgDisabled){
|
||||
c.reply({
|
||||
text: getMessage(c.lang, 'command.netmsg.disabled'),
|
||||
text: getMessage(c.lang, "command.netmsg.disabled"),
|
||||
color: c.colors.secondary
|
||||
})
|
||||
return
|
||||
|
@ -36,9 +36,9 @@ module.exports = {
|
|||
],
|
||||
color: 'white'
|
||||
}
|
||||
bot.forEach(item => {
|
||||
if (item.host.options.hidden) return
|
||||
item.tellraw('@a', json)
|
||||
})
|
||||
for (const i in bot) {
|
||||
if(bot[i].host.options.netmsgDisabled) continue
|
||||
bot[i].tellraw('@a', json)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,40 +4,40 @@ module.exports = {
|
|||
execute: (c) => {
|
||||
const subcmd = c.args.splice(0, 1)[0]
|
||||
switch (subcmd) {
|
||||
case 'set':{
|
||||
const allowedKeys = ['colorPrimary', 'colorSecondary', 'lang']
|
||||
case 'set':
|
||||
const allowedKeys = ["colorPrimary", "colorSecondary", "lang"]
|
||||
const key = c.args.splice(0, 1)[0]
|
||||
if (!allowedKeys.includes(key)) {
|
||||
if(!allowedKeys.includes(key)){
|
||||
c.reply({
|
||||
text: getMessage(c.lang, 'command.settings.error.invalidKey'),
|
||||
color: c.colors.secondary
|
||||
})
|
||||
return
|
||||
});
|
||||
return;
|
||||
}
|
||||
const value = c.args.join(' ')
|
||||
if (value === '' && key === 'lang') {
|
||||
const value = c.args.join(" ")
|
||||
if(value === "" && key==="lang"){
|
||||
// Show all valid languages to user
|
||||
for (const item of languages) {
|
||||
for(const i in languages){
|
||||
c.reply({
|
||||
translate: '%s (%s)',
|
||||
translate: "%s (%s)",
|
||||
color: c.colors.secondary,
|
||||
with: [
|
||||
with:[
|
||||
{
|
||||
text: getMessage(item, 'language.name'),
|
||||
color: c.colors.primary
|
||||
text: getMessage(languages[i], 'language.name'),
|
||||
color: c.colors.primary
|
||||
},
|
||||
{
|
||||
text: getMessage(item, 'language.region'),
|
||||
text: getMessage(languages[i], 'language.region'),
|
||||
color: c.colors.primary
|
||||
}
|
||||
],
|
||||
hoverEvent: {
|
||||
action: 'show_text',
|
||||
hoverEvent:{
|
||||
action: "show_text",
|
||||
value: {
|
||||
translate: getMessage(item, 'command.settings.setLanguage'),
|
||||
with: [
|
||||
translate: getMessage(languages[i], 'command.settings.setLanguage'),
|
||||
with:[
|
||||
{
|
||||
text: `${c.prefix}settings set lang ${item}`,
|
||||
text: `${c.prefix}settings set lang ${languages[i]}`,
|
||||
color: c.colors.secondary
|
||||
}
|
||||
]
|
||||
|
@ -47,19 +47,19 @@ module.exports = {
|
|||
}
|
||||
return
|
||||
}
|
||||
if (value === '') {
|
||||
if(value === ""){
|
||||
c.reply({
|
||||
text: getMessage(c.lang, 'command.settings.error.mustProvideValue'),
|
||||
color: c.colors.secondary
|
||||
})
|
||||
return
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (key === 'lang' && !languages.includes(value)) {
|
||||
if(key==="lang" && !languages.includes(value)){
|
||||
c.reply({
|
||||
text: getMessage(c.lang, 'command.settings.error.invalidLanguage'),
|
||||
color: c.colors.secondary
|
||||
})
|
||||
return
|
||||
});
|
||||
return;
|
||||
}
|
||||
c.prefs[key] = value
|
||||
|
||||
|
@ -67,20 +67,19 @@ module.exports = {
|
|||
fs.writeFileSync(`userPref/${c.uuid}.json`, JSON.stringify(c.prefs))
|
||||
|
||||
// Delete require cache
|
||||
for (const i in require.cache) {
|
||||
if (i.endsWith(`${c.uuid}.json`)) delete require.cache[i]
|
||||
for(const i in require.cache){
|
||||
if(i.endsWith(`${c.uuid}.json`)) delete require.cache[i]
|
||||
}
|
||||
c.reply({
|
||||
text: getMessage(c.lang, 'command.settings.saved'),
|
||||
color: c.colors.secondary
|
||||
})
|
||||
break
|
||||
}
|
||||
case 'get':
|
||||
});
|
||||
break;
|
||||
case 'get':{
|
||||
c.reply({
|
||||
translate: '%s: %s',
|
||||
color: c.colors.primary,
|
||||
with: [
|
||||
translate: "%s: %s",
|
||||
color: c.colors.secondary,
|
||||
with:[
|
||||
{
|
||||
text: getMessage(c.lang, 'command.settings.get.colorPrimary'),
|
||||
color: c.colors.secondary
|
||||
|
@ -92,9 +91,9 @@ module.exports = {
|
|||
]
|
||||
})
|
||||
c.reply({
|
||||
translate: '%s: %s',
|
||||
color: c.colors.primary,
|
||||
with: [
|
||||
translate: "%s: %s",
|
||||
color: c.colors.secondary,
|
||||
with:[
|
||||
{
|
||||
text: getMessage(c.lang, 'command.settings.get.colorSecondary'),
|
||||
color: c.colors.secondary
|
||||
|
@ -106,12 +105,12 @@ module.exports = {
|
|||
]
|
||||
})
|
||||
c.reply({
|
||||
translate: '%s: %s (%s)',
|
||||
color: c.colors.primary,
|
||||
with: [
|
||||
translate: "%s: %s (%s)",
|
||||
color: c.colors.secondary,
|
||||
with:[
|
||||
{
|
||||
text: getMessage(c.lang, 'command.settings.get.language'),
|
||||
color: c.colors.secondary
|
||||
color: c.colors.primary
|
||||
},
|
||||
{
|
||||
text: getMessage(c.lang, 'language.name'),
|
||||
|
@ -124,6 +123,7 @@ module.exports = {
|
|||
]
|
||||
})
|
||||
break
|
||||
}
|
||||
default:
|
||||
c.reply({
|
||||
translate: getMessage(c.lang, 'command.cloop.error.subcommand'),
|
||||
|
|
25
index.js
25
index.js
|
@ -6,18 +6,17 @@ const fs = require('fs')
|
|||
|
||||
module.exports.bot = []
|
||||
|
||||
const botplug = []
|
||||
const bpl = fs.readdirSync('plugins')
|
||||
for (const plugin of bpl) {
|
||||
if (!plugin.endsWith('.js')) {
|
||||
continue
|
||||
}
|
||||
try {
|
||||
botplug.push(require(`./plugins/${plugin}`))
|
||||
} catch (e) { console.log(e) }
|
||||
}
|
||||
|
||||
const loadplug = (botno) => {
|
||||
const botplug = []
|
||||
const bpl = fs.readdirSync('plugins')
|
||||
for (const i in bpl) {
|
||||
if (!bpl[i].endsWith('.js')) {
|
||||
continue
|
||||
}
|
||||
try {
|
||||
botplug.push(require(`./plugins/${bpl[i]}`))
|
||||
} catch (e) { console.log(e) }
|
||||
}
|
||||
botplug.forEach((plug) => {
|
||||
try {
|
||||
if (plug.load) {
|
||||
|
@ -67,8 +66,8 @@ const createBot = function createBot (host, oldId) {
|
|||
})
|
||||
}
|
||||
|
||||
for (const server of settings.servers) {
|
||||
createBot(server)
|
||||
for (const i in settings.servers) {
|
||||
createBot(settings.servers[i])
|
||||
}
|
||||
|
||||
module.exports.createBot = createBot
|
||||
|
|
38
package-lock.json
generated
38
package-lock.json
generated
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "botv10",
|
||||
"version": "10.0.0",
|
||||
"version": "10.0.0-beta-2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "botv10",
|
||||
"version": "10.0.0",
|
||||
"version": "10.0.0-beta-2",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"minecraft-protocol": "^1.45.0",
|
||||
|
@ -14,21 +14,21 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@azure/msal-common": {
|
||||
"version": "14.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.14.1.tgz",
|
||||
"integrity": "sha512-2Q3tqNz/PZLfSr8BvcHZVpRRfSn4MjGSqjj9J+HlBsmbf1Uu4P0WeXnemjTJwwx9KrmplsrN3UkZ/LPOR720rw==",
|
||||
"version": "14.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.14.0.tgz",
|
||||
"integrity": "sha512-OxcOk9H1/1fktHh6//VCORgSNJc2dCQObTm6JNmL824Z6iZSO6eFo/Bttxe0hETn9B+cr7gDouTQtsRq3YPuSQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@azure/msal-node": {
|
||||
"version": "2.13.0",
|
||||
"resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.13.0.tgz",
|
||||
"integrity": "sha512-DhP97ycs7qlCVzzzWGzJiwAFyFj5okno74E4FUZ61oCLfKh4IxA1kxirqzrWuYZWpBe9HVPL6GA4NvmlEOBN5Q==",
|
||||
"version": "2.12.0",
|
||||
"resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.12.0.tgz",
|
||||
"integrity": "sha512-jmk5Im5KujRA2AcyCb0awA3buV8niSrwXZs+NBJWIvxOz76RvNlusGIqi43A0h45BPUy93Qb+CPdpJn82NFTIg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@azure/msal-common": "14.14.1",
|
||||
"@azure/msal-common": "14.14.0",
|
||||
"jsonwebtoken": "^9.0.0",
|
||||
"uuid": "^8.3.0"
|
||||
},
|
||||
|
@ -37,12 +37,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "22.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.0.tgz",
|
||||
"integrity": "sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==",
|
||||
"version": "22.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz",
|
||||
"integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.19.2"
|
||||
"undici-types": "~6.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/readable-stream": {
|
||||
|
@ -427,9 +427,9 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/minecraft-data": {
|
||||
"version": "3.68.0",
|
||||
"resolved": "https://registry.npmjs.org/minecraft-data/-/minecraft-data-3.68.0.tgz",
|
||||
"integrity": "sha512-pNBTi39a1zbFpN9itwi0YSL3hqAsSw38D7pE9C6m+aURmXljpBlNTO+TkpZxxDv4KqqtNBOhmkj4x46IDW6R+Q==",
|
||||
"version": "3.67.0",
|
||||
"resolved": "https://registry.npmjs.org/minecraft-data/-/minecraft-data-3.67.0.tgz",
|
||||
"integrity": "sha512-/hLeYXopx9o1UdViPPFenLJ3hT5S4qUEwLQM0MAHOIhqkAUGXdkl47O7ohG+f87DH3+cZksbbM61sTnSRsQpsA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/minecraft-folder-path": {
|
||||
|
@ -762,9 +762,9 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/undici-types": {
|
||||
"version": "6.19.8",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
||||
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
||||
"version": "6.13.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
|
||||
"integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/uri-js": {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"prismarine-chat": "^1.10.0"
|
||||
},
|
||||
"name": "botv10",
|
||||
"version": "10.0.0",
|
||||
"version": "10.0.0-beta-2",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
|
|
180
plugins/!chat.js
180
plugins/!chat.js
|
@ -1,105 +1,3 @@
|
|||
const console2 = require("./console.js")
|
||||
const parse = require("../util/chatparse.js")
|
||||
const parse1204 = require("../util/chatparse_1204.js")
|
||||
const messageTypes=[
|
||||
"",
|
||||
"chat.type.emote",
|
||||
"commands.message.display.incoming",
|
||||
"",
|
||||
"",
|
||||
"chat.type.announcement",
|
||||
"",
|
||||
""
|
||||
]
|
||||
module.exports={
|
||||
load:()=>{
|
||||
|
||||
},
|
||||
loadBot:(b)=>{
|
||||
b._client.on("profileless_chat",(data)=>{
|
||||
if(data.type==4){
|
||||
const json=parse1204(data.message);
|
||||
const parsed=parse(json)[1];
|
||||
let split=parsed.split(": ");
|
||||
const chatName = split.splice(0,1)[0]
|
||||
const username=b.findRealName(chatName);
|
||||
const uuid=b.findUUID(username)
|
||||
b.emit("chat",{json,type:"profileless",uuid,message: split.join(": "), username})
|
||||
} else {
|
||||
b.emit("chat",{
|
||||
json: {
|
||||
translate: messageTypes[data.type],
|
||||
color:data.type==2?"gray":"reset",
|
||||
with:[
|
||||
parse1204(data.name),
|
||||
parse1204(data.message)
|
||||
]
|
||||
},
|
||||
type:"profileless",
|
||||
uuid:"00000000-0000-0000-0000-000000000000",
|
||||
message: parse(parse1204(data.message))[1],
|
||||
username:parse(parse1204(data.name))[1]
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
b._client.on("player_chat",(data)=>{
|
||||
if(data.type==4){
|
||||
b.emit("chat",{json:parse1204(data.unsignedChatContent),type:"player",uuid:data.senderUuid, message: data.plainMessage, username: parse(parse1204(data.networkName))[1]})
|
||||
} else {
|
||||
b.emit("chat",{
|
||||
json: {
|
||||
translate: messageTypes[data.type],
|
||||
color:data.type==2?"gray":"reset",
|
||||
with:[
|
||||
parse1204(data.networkName),
|
||||
data.plainMessage
|
||||
]
|
||||
},
|
||||
type:"player",
|
||||
uuid:data.senderUuid,
|
||||
message: parse(data.plainMessage)[1],
|
||||
username:parse(parse1204(data.networkName))[1]
|
||||
})
|
||||
}
|
||||
})
|
||||
b._client.on("system_chat",(data)=>{
|
||||
const json=parse1204(data.content);
|
||||
const parsed=parse(json)[1];
|
||||
let split=parsed.split(": ");
|
||||
const chatName = split.splice(0,1)[0]
|
||||
const username=b.findRealName(chatName);
|
||||
const uuid=b.findUUID(username)
|
||||
b.emit("chat",{json,type:"system",uuid, message: split.join(": "), username})
|
||||
})
|
||||
b._client.on("chat",(data)=>{ //Legacy chat
|
||||
const json=parse1204(data.message);
|
||||
const parsed=parse(json)[1];
|
||||
let split=parsed.split(": ");
|
||||
const chatName = split.splice(0,1)[0]
|
||||
const username=b.findRealName(chatName);
|
||||
const uuid=b.findUUID(username)
|
||||
b.emit("chat",{json,type:"legacy",uuid:data.uuid?data.uuid:uuid, message: split.join(": "), username})
|
||||
})
|
||||
b.on("chat",(data)=>{
|
||||
const msg=parse(data.json);
|
||||
if(msg[1].endsWith("\n\n\n\n\nThe chat has been cleared")) return;
|
||||
if(msg[1].startsWith("Command set: ")) return;
|
||||
b.emit("plainchat",msg[1])
|
||||
console2.write(`[${b.id}] [${data.type}] `+msg[0])
|
||||
let fullCommand = data.message;
|
||||
|
||||
for(const i in b.prefix){
|
||||
if(fullCommand.startsWith(b.prefix[i])){
|
||||
const command=fullCommand.slice(b.prefix[i].length);
|
||||
b.runCommand(data.username,data.uuid,command,b.prefix[i]);
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
parse
|
||||
}
|
||||
|
||||
const settings = require('../settings.json')
|
||||
const parsePlain = require('../util/chatparse_plain.js')
|
||||
const parseConsole = require('../util/chatparse_console.js')
|
||||
|
@ -122,21 +20,10 @@ module.exports = {
|
|||
const parsed = parsePlain(json)
|
||||
const split = parsed.split(': ')
|
||||
const chatName = split.splice(0, 1)[0]
|
||||
const chatNameSplit = chatName.split(' ')
|
||||
const nickname = chatNameSplit[chatNameSplit.length - 1]
|
||||
const username = b.findRealName(chatName)
|
||||
const uuid = b.findUUID(username)
|
||||
b.emit('chat', {
|
||||
json,
|
||||
type: 'profileless',
|
||||
uuid,
|
||||
message: split.join(': '),
|
||||
nickname,
|
||||
username
|
||||
})
|
||||
b.emit('chat', { json, type: 'profileless', uuid, message: split.join(': '), username })
|
||||
} else if (data.type === 6 || data.type === 7) {
|
||||
const uuid = b.findUUID(parsePlain(parse1204(data.name)))
|
||||
const nickname = b.findDisplayName(uuid)
|
||||
b.emit('chat', {
|
||||
json: {
|
||||
translate: messageTypes[data.type],
|
||||
|
@ -148,14 +35,11 @@ module.exports = {
|
|||
]
|
||||
},
|
||||
type: 'profileless',
|
||||
uuid,
|
||||
uuid: data.senderUuid,
|
||||
message: parsePlain(data.message),
|
||||
nickname,
|
||||
username: parsePlain(parse1204(data.name))
|
||||
})
|
||||
} else {
|
||||
const uuid = b.findUUID(parsePlain(parse1204(data.name)))
|
||||
const nickname = b.findDisplayName(uuid)
|
||||
b.emit('chat', {
|
||||
json: {
|
||||
translate: messageTypes[data.type],
|
||||
|
@ -166,9 +50,8 @@ module.exports = {
|
|||
]
|
||||
},
|
||||
type: 'profileless',
|
||||
uuid,
|
||||
uuid: '00000000-0000-0000-0000-000000000000',
|
||||
message: parsePlain(parse1204(data.message)),
|
||||
nickname,
|
||||
username: parsePlain(parse1204(data.name))
|
||||
})
|
||||
}
|
||||
|
@ -176,14 +59,7 @@ module.exports = {
|
|||
|
||||
b._client.on('player_chat', (data) => {
|
||||
if (data.type === 4) {
|
||||
b.emit('chat', {
|
||||
json: parse1204(data.unsignedChatContent),
|
||||
type: 'player',
|
||||
uuid: data.senderUuid,
|
||||
message: data.plainMessage,
|
||||
nickname: parsePlain(parse1204(data.networkName)),
|
||||
username: b.findRealNameFromUUID(data.senderUuid)
|
||||
})
|
||||
b.emit('chat', { json: parse1204(data.unsignedChatContent), type: 'player', uuid: data.senderUuid, message: data.plainMessage, username: parsePlain(parse1204(data.networkName)) })
|
||||
} else if (data.type === 6 || data.type === 7) {
|
||||
b.emit('chat', {
|
||||
json: {
|
||||
|
@ -198,8 +74,7 @@ module.exports = {
|
|||
type: 'player',
|
||||
uuid: data.senderUuid,
|
||||
message: parsePlain(data.plainMessage),
|
||||
nickname: parsePlain(parse1204(data.networkName)),
|
||||
username: b.findRealNameFromUUID(data.senderUuid)
|
||||
username: parsePlain(parse1204(data.networkName))
|
||||
})
|
||||
} else {
|
||||
b.emit('chat', {
|
||||
|
@ -214,8 +89,7 @@ module.exports = {
|
|||
type: 'player',
|
||||
uuid: data.senderUuid,
|
||||
message: parsePlain(data.plainMessage),
|
||||
nickname: parsePlain(parse1204(data.networkName)),
|
||||
username: b.findRealNameFromUUID(data.senderUuid)
|
||||
username: parsePlain(parse1204(data.networkName))
|
||||
})
|
||||
}
|
||||
})
|
||||
|
@ -225,25 +99,15 @@ module.exports = {
|
|||
const parsed = parsePlain(json)
|
||||
const split = parsed.split(': ')
|
||||
const chatName = split.splice(0, 1)[0]
|
||||
const chatNameSplit = chatName.split(' ')
|
||||
const nickname = chatNameSplit[chatNameSplit.length - 1]
|
||||
const username = b.findRealName(chatName)
|
||||
const uuid = b.findUUID(username)
|
||||
b.emit('chat', {
|
||||
json,
|
||||
type: 'system',
|
||||
uuid,
|
||||
message: split.join(': '),
|
||||
nickname,
|
||||
username
|
||||
})
|
||||
b.emit('chat', { json, type: 'system', uuid, message: split.join(': '), username })
|
||||
})
|
||||
|
||||
b._client.on('chat', (data) => { // Legacy chat for versions <1.19
|
||||
b._client.on('chat', (data) => { // Legacy chat
|
||||
const json = parse1204(data.message)
|
||||
const parsed = parsePlain(json)
|
||||
let chatName
|
||||
let nickname
|
||||
let username
|
||||
let message
|
||||
let uuid
|
||||
|
@ -255,22 +119,12 @@ module.exports = {
|
|||
uuid = b.findUUID(username)
|
||||
} else { // Servers with Extras chat, such as Kaboom
|
||||
const split = parsed.split(': ')
|
||||
chatName = split.splice(0, 1)[0]
|
||||
const chatNameSplit = chatName.split(' ')
|
||||
nickname = chatNameSplit[chatNameSplit.length - 1]
|
||||
username = b.findRealName(chatName)
|
||||
uuid = b.findUUID(username)
|
||||
message = split.join(': ')
|
||||
uuid = b.findUUID(username)
|
||||
chatName = split.splice(0, 1)[0]
|
||||
username = b.findRealName(chatName)
|
||||
}
|
||||
if (data.uuid) uuid = data.uuid
|
||||
b.emit('chat', {
|
||||
json,
|
||||
type: 'legacy',
|
||||
uuid,
|
||||
message,
|
||||
nickname,
|
||||
username
|
||||
})
|
||||
b.emit('chat', { json, type: 'legacy', uuid: data.uuid ? data.uuid : uuid, message, username })
|
||||
})
|
||||
|
||||
b.on('chat', (data) => {
|
||||
|
@ -279,14 +133,14 @@ module.exports = {
|
|||
if (settings.logJSONmessages) console.log(data.json)
|
||||
if (msgPlain.endsWith('\n\n\n\n\nThe chat has been cleared')) return
|
||||
if (msgPlain.startsWith('Command set: ')) return
|
||||
b.emit('plainchat', msgPlain, data.type)
|
||||
b.emit('plainchat', msgPlain)
|
||||
b.displayChat(data.type, `${msgConsole}\x1b[0m`)
|
||||
|
||||
const fullCommand = data.message
|
||||
for (const prefix of b.prefix) {
|
||||
if (fullCommand.startsWith(prefix)) {
|
||||
const command = fullCommand.slice(prefix.length)
|
||||
b.runCommand(data.username, data.nickname, data.uuid, command, data.type, prefix)
|
||||
for (const i in b.prefix) {
|
||||
if (fullCommand.startsWith(b.prefix[i])) {
|
||||
const command = fullCommand.slice(b.prefix[i].length)
|
||||
b.runCommand(data.username, data.uuid, command, b.prefix[i])
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
@ -14,8 +14,8 @@ module.exports = {
|
|||
b.cloops.splice(index, 1)
|
||||
}
|
||||
b.clearCloops = function () {
|
||||
for (const cloop of b.cloops) {
|
||||
clearInterval(cloop.interval)
|
||||
for (const i in b.cloops) {
|
||||
clearInterval(b.cloops[i].interval)
|
||||
}
|
||||
b.cloops = []
|
||||
}
|
||||
|
|
|
@ -3,11 +3,11 @@ const hashcheck = require('../util/hashcheck.js')
|
|||
const settings = require('../settings.json')
|
||||
const { getMessage } = require('../util/lang.js')
|
||||
const cmds = require('../util/commands.js')
|
||||
const fs = require('fs')
|
||||
const fs = require("fs")
|
||||
|
||||
if (!fs.readdirSync('.').includes('userPref')) fs.mkdirSync('userPref')
|
||||
if(!fs.readdirSync('.').includes('userPref')) fs.mkdirSync("userPref");
|
||||
|
||||
const loadSettings = function (uuid) {
|
||||
const loadSettings = function(uuid){
|
||||
try {
|
||||
return require(`../userPref/${uuid}.json`)
|
||||
} catch (e) {
|
||||
|
@ -18,10 +18,10 @@ module.exports = {
|
|||
load: (b) => {
|
||||
b.prefix = settings.prefix
|
||||
b.lastCmd = 0
|
||||
b.runCommand = (name, nickname, uuid, text, msgType, prefix) => {
|
||||
b.runCommand = (name, uuid, text, prefix) => {
|
||||
if (uuid === '00000000-0000-0000-0000-000000000000') return
|
||||
if (Date.now() - b.lastCmd <= 1000) return
|
||||
const userSettings = loadSettings(uuid)
|
||||
const userSettings = loadSettings(uuid);
|
||||
b.lastCmd = Date.now()
|
||||
const cmd = text.split(' ')
|
||||
const lang = settings.defaultLang
|
||||
|
@ -29,7 +29,6 @@ module.exports = {
|
|||
if (verify > 0) {
|
||||
text = cmd.slice(0, cmd.length - 1).join(' ')
|
||||
}
|
||||
b.emit('command', name, uuid, text, prefix)
|
||||
if (cmds[cmd[0].toLowerCase()]) {
|
||||
const command = cmds[cmd[0].toLowerCase()]
|
||||
if (command.level !== undefined && command.level > verify) {
|
||||
|
@ -45,7 +44,7 @@ module.exports = {
|
|||
return
|
||||
}
|
||||
try {
|
||||
cmds[cmd[0].toLowerCase()].execute(new Command(uuid, name, nickname, text, msgType, prefix, b, verify, userSettings))
|
||||
cmds[cmd[0].toLowerCase()].execute(new Command(uuid, name, 'nick N/A', text, prefix, b, verify, userSettings))
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
b.tellraw(uuid, {
|
||||
|
|
|
@ -1,110 +1,3 @@
|
|||
const uuidToInt = require('../util/uuidtoint.js')
|
||||
module.exports = {
|
||||
cs: 4,
|
||||
cs_v: 6,
|
||||
load: function () {
|
||||
|
||||
},
|
||||
loadBot: function (b) {
|
||||
b.interval.commandFill = setInterval(() => { if(b.sc_tasks["cc"]) b.sc_tasks["cc"].failed = 1; }, 60000)
|
||||
b.ccq = []
|
||||
b.blocknoX = 0
|
||||
b.blocknoZ = 0
|
||||
b.ccStarted = 0
|
||||
b.blocknoY = 0
|
||||
b.pos = { x: 0, y: 0, z: 0, correct: 0 }
|
||||
|
||||
b.advanceccq = function () {
|
||||
if (b.ccq[0] && b.ccq[0].length != 0) {
|
||||
b._client.write('update_command_block', {
|
||||
command: b.ccq[0],
|
||||
location: {
|
||||
x: b.commandPos.x1 + b.blocknoX,
|
||||
y: b.commandPos.y1 + b.blocknoY,
|
||||
z: b.commandPos.z1 + b.blocknoZ
|
||||
},
|
||||
mode: 2,
|
||||
flags: 1
|
||||
})
|
||||
b._client.write('update_command_block', {
|
||||
command: b.ccq[0],
|
||||
location: {
|
||||
x: b.commandPos.x1 + b.blocknoX,
|
||||
y: b.commandPos.y1 + b.blocknoY,
|
||||
z: b.commandPos.z1 + b.blocknoZ
|
||||
},
|
||||
mode: 2,
|
||||
flags: 5
|
||||
})
|
||||
b.blocknoX++
|
||||
if (b.blocknoX == module.exports.cs) {
|
||||
b.blocknoY++
|
||||
b.blocknoX = 0
|
||||
if (b.blocknoY == module.exports.cs_v) {
|
||||
b.blocknoZ++
|
||||
b.blocknoY = 0
|
||||
if (b.blocknoZ == module.exports.cs) {
|
||||
b.blocknoZ = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
b.ccq.splice(0, 1)
|
||||
}
|
||||
b._client.on("login",()=>{
|
||||
b.add_sc_task("cc",`/fill ~ 55 ~ ~3 60 ~3 command_block{CustomName:'{"translate":"%s %s","with":[{"translate":"entity.minecraft.ender_dragon"},{"translate":"language.region"}],"color":"#FFAAEE"}'}`,true,true)
|
||||
b.add_sc_task("cc_size",`/gamerule commandModificationBlockLimit 32767`,true,false,true)
|
||||
})
|
||||
b.on('ccstart', () => {
|
||||
setTimeout(() => { b.interval.ccqi = setInterval(b.advanceccq, 3) }, 1000) // 1 Second and 3 Milliseconds
|
||||
b.ccStarted = true;
|
||||
})
|
||||
b.on('chat', (data) => {
|
||||
if(data.json.translate == 'commands.fill.failed' || (data.json.extra && data.json.extra[0] && data.json.extra[0].translate == 'commands.fill.failed') ||
|
||||
data.json.translate == 'commands.fill.success' || (data.json.extra && data.json.extra[0] && data.json.extra[0].translate == 'commands.fill.success')){
|
||||
if (!b.ccStarted) {
|
||||
b.emit('ccstart')
|
||||
}
|
||||
b.sc_tasks["cc"].failed = 0;
|
||||
b.sc_tasks["cc_size"].failed = 0;
|
||||
} else if(data.json.translate == 'commands.fill.toobig' || (data.json.extra && data.json.extra[0] && data.json.extra[0].translate == 'commands.fill.toobig')){
|
||||
b.sc_tasks["cc_size"].failed = 1;
|
||||
}
|
||||
})
|
||||
b._client.on('position', function (a) {
|
||||
if (!b.ccStarted) {
|
||||
b.original_pos = { x: a.x, y: a.y, z: a.z }
|
||||
b.pos = { x: a.x, y: a.y, z: a.z, correct: 1 }
|
||||
} else {
|
||||
b.pos = { x: a.x, y: a.y, z: a.z, correct: 1 }
|
||||
if (a.x != b.original_pos.x || a.z != b.original_pos.z) {
|
||||
b.original_pos = { x: a.x, y: a.y, z: a.z }
|
||||
b.pos.correct = 0
|
||||
b.sc_tasks["cc"].failed = 1;
|
||||
}
|
||||
}
|
||||
|
||||
b.commandPos = {
|
||||
x1: Math.floor(a.x),
|
||||
z1: Math.floor(a.z),
|
||||
y1: 55
|
||||
}
|
||||
b._client.write('teleport_confirm', { teleportId: a.teleportId })
|
||||
})
|
||||
b.tellraw = (uuid, message) => {
|
||||
let finalname = ''
|
||||
if (uuid == '@a') {
|
||||
finalname = '@a'
|
||||
} else if (uuid.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/)) {
|
||||
finalname = `@a[nbt={UUID:[I;${uuidToInt(uuid)}]}]`
|
||||
} else {
|
||||
finalname = uuid
|
||||
}
|
||||
b.ccq.push(`/minecraft:tellraw ${finalname} ${JSON.stringify(message)}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const uuidToInt = require('../util/uuidtoint.js')
|
||||
const cs = {
|
||||
x: 4,
|
||||
|
@ -126,7 +19,7 @@ module.exports = {
|
|||
b.advanceccq = function () {
|
||||
if (b.ccq[0] && b.ccq[0].length !== 0) {
|
||||
b._client.write('update_command_block', {
|
||||
command: '/',
|
||||
command: b.ccq[0],
|
||||
location: {
|
||||
x: b.commandPos.x + b.blocknoX,
|
||||
y: b.commandPos.y + b.blocknoY,
|
||||
|
@ -136,7 +29,7 @@ module.exports = {
|
|||
flags: 1
|
||||
})
|
||||
b._client.write('update_command_block', {
|
||||
command: b.ccq[0].substr(0, 32767),
|
||||
command: b.ccq[0],
|
||||
location: {
|
||||
x: b.commandPos.x + b.blocknoX,
|
||||
y: b.commandPos.y + b.blocknoY,
|
||||
|
@ -162,14 +55,6 @@ module.exports = {
|
|||
}
|
||||
|
||||
b._client.on('login', () => {
|
||||
b._client.write('settings', {
|
||||
locale: 'ru_RU',
|
||||
viewDistance: 4,
|
||||
chatFlags: 0, // Enable full chat functionality
|
||||
chatColors: true,
|
||||
skinParts: 127, // Allow the second layer of the skin, when the bot is sudoed to do /skin
|
||||
mainHand: 1 // Right hand
|
||||
})
|
||||
b.add_sc_task('cc', () => {
|
||||
b.chat(b.refillCoreCmd)
|
||||
}, true)
|
||||
|
@ -178,7 +63,7 @@ module.exports = {
|
|||
})
|
||||
})
|
||||
b.on('ccstart', () => {
|
||||
setTimeout(() => { b.interval.ccqi = setInterval(b.advanceccq, 2) }, 1000)
|
||||
setTimeout(() => { b.interval.ccqi = setInterval(b.advanceccq, 3) }, 1000) // 1 Second and 3 Milliseconds
|
||||
b.ccStarted = true
|
||||
})
|
||||
b.on('chat', (data) => {
|
||||
|
|
|
@ -1,54 +1,52 @@
|
|||
const readln = require('readline')
|
||||
const index = require('../index.js')
|
||||
const ConsoleCommand = require('../util/ConsoleCommand.js')
|
||||
const fs = require('fs')
|
||||
const newercommands = require('./command.js').cmds;
|
||||
let rl
|
||||
function consoleWrite(text) {
|
||||
const cmds = require('../util/commands.js')
|
||||
const rl = readln.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout,
|
||||
prompt: '\x1b[0m> '
|
||||
})
|
||||
rl.on('line', (l) => {
|
||||
try {
|
||||
if (cmds[l.split(' ')[0].toLowerCase()]) {
|
||||
if (cmds[l.split(' ')[0].toLowerCase()].consoleIndex) {
|
||||
const tmpcmd = l.split(' ')
|
||||
const index2 = tmpcmd.splice(1, 1)[0]
|
||||
if (index2 === '*') {
|
||||
for (let i = 0; i < index.bot.length; i++) {
|
||||
const cmd = new ConsoleCommand(tmpcmd.join(' '), i)
|
||||
cmds[l.split(' ')[0].toLowerCase()].execute(cmd)
|
||||
}
|
||||
} else {
|
||||
const cmd = new ConsoleCommand(tmpcmd.join(' '), +index2)
|
||||
cmds[l.split(' ')[0].toLowerCase()].execute(cmd)
|
||||
}
|
||||
} else {
|
||||
const cmd = new ConsoleCommand(l, -2)
|
||||
cmds[l.split(' ')[0].toLowerCase()].execute(cmd)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
rl.prompt(false)
|
||||
})
|
||||
rl.prompt()
|
||||
|
||||
function consoleWrite (text) {
|
||||
readln.cursorTo(process.stdout, 0)
|
||||
readln.clearLine(process.stdout, 0)
|
||||
process.stdout.write(text + '\n')
|
||||
rl.prompt(true)
|
||||
}
|
||||
module.exports = {
|
||||
load: () => {
|
||||
rl = readln.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout,
|
||||
prompt: '\x1b[0m\x1b[38;5;15m> '
|
||||
})
|
||||
rl.on('line', (l) => {
|
||||
try {
|
||||
if(newercommands[l.split(' ')[0].toLowerCase()]){
|
||||
if(newercommands[l.split(' ')[0].toLowerCase()].consoleIndex){
|
||||
let tmpcmd = l.split(' ');
|
||||
const index2 = tmpcmd.splice(1,1)[0];
|
||||
if (index2 === '*') {
|
||||
for (let i = 0; i < index.bot.length; i++) {
|
||||
const cmd = new ConsoleCommand(tmpcmd.join(' '),i);
|
||||
newercommands[l.split(' ')[0].toLowerCase()].execute(cmd)
|
||||
}
|
||||
} else {
|
||||
const cmd = new ConsoleCommand(tmpcmd.join(' '),+index2);
|
||||
newercommands[l.split(' ')[0].toLowerCase()].execute(cmd)
|
||||
}
|
||||
} else {
|
||||
const cmd = new ConsoleCommand(l,-2);
|
||||
newercommands[l.split(' ')[0].toLowerCase()].execute(cmd)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
rl.prompt(false)
|
||||
})
|
||||
rl.prompt()
|
||||
},
|
||||
loadBot: (b)=>{
|
||||
b.info=(msg)=>{
|
||||
load: (b) => {
|
||||
b.info = (msg) => {
|
||||
consoleWrite(`[${b.id}] [info] ${msg}`)
|
||||
}
|
||||
},
|
||||
rl,
|
||||
write: consoleWrite
|
||||
b.displayChat = (type, msg) => {
|
||||
consoleWrite(`[${b.id}] [${type}] ${msg}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,23 +1,19 @@
|
|||
module.exports={
|
||||
load:()=>{
|
||||
|
||||
},
|
||||
loadBot:(b)=>{
|
||||
b._client.on("login",()=>{
|
||||
b.interval.chatQueue=setInterval(()=>{
|
||||
if(b.chatqueue.length!=0){
|
||||
b._client.chat(b.chatqueue[0]);
|
||||
b.chatqueue.splice(0,1)
|
||||
}
|
||||
},150)
|
||||
})
|
||||
b.chatqueue=[];
|
||||
b.chat=function chat(msg){
|
||||
if(msg.length==0) return;
|
||||
msg.match(/.{1,250}/g).forEach(element => {
|
||||
b.chatqueue.push(element)
|
||||
});
|
||||
module.exports = {
|
||||
load: (b) => {
|
||||
b._client.on('login', () => {
|
||||
b.interval.chatQueue = setInterval(() => {
|
||||
if (b.chatqueue.length !== 0) {
|
||||
b._client.chat(b.chatqueue[0])
|
||||
b.chatqueue.splice(0, 1)
|
||||
}
|
||||
|
||||
}, 100)
|
||||
})
|
||||
b.chatqueue = []
|
||||
b.chat = function chat (msg) {
|
||||
if (msg.length === 0) return
|
||||
msg.match(/.{1,255}/g).forEach(element => {
|
||||
b.chatqueue.push(element)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,25 +5,25 @@ module.exports = {
|
|||
b.players = {}
|
||||
b._client.on('player_info', (data) => {
|
||||
const buffer2 = {}
|
||||
for (const player of data.data) {
|
||||
for (const i in data.data) {
|
||||
let uuid
|
||||
if (player.uuid) {
|
||||
uuid = player.uuid
|
||||
} else if (player.UUID) {
|
||||
uuid = player.UUID
|
||||
if (data.data[i].uuid) {
|
||||
uuid = data.data[i].uuid
|
||||
} else if (data.data[i].UUID) {
|
||||
uuid = data.data[i].UUID
|
||||
}
|
||||
let displayName
|
||||
if (player.displayName !== undefined) {
|
||||
displayName = player.displayName
|
||||
if (data.data[i].displayName !== undefined) {
|
||||
displayName = data.data[i].displayName
|
||||
} else {
|
||||
displayName = '{"text":"[[[[ No display name ]]]]"}'
|
||||
}
|
||||
if (player.player && player.player.name !== undefined) {
|
||||
buffer2[uuid] = { realName: player.player.name, displayName: parse(parseNBT(displayName)) }
|
||||
} else if (player.name !== undefined) {
|
||||
buffer2[uuid] = { realName: player.name, displayName: parse(parseNBT(displayName)) }
|
||||
} else if (player.displayName !== undefined) {
|
||||
buffer2[uuid] = { displayName: parse(parseNBT(displayName)) }
|
||||
if (data.data[i].player && data.data[i].player.name !== undefined) {
|
||||
buffer2[uuid] = { realName: data.data[i].player.name, displayName: parse(parseNBT(displayName)) }
|
||||
} else if (data.data[i].name !== undefined) {
|
||||
buffer2[uuid] = { realName: data.data[i].name, displayName: parse(parseNBT(displayName)) }
|
||||
} else if (data.data[i].displayName !== undefined) {
|
||||
buffer2[uuid] = { displayName: displayName.plain }
|
||||
}
|
||||
}
|
||||
for (const uuid in buffer2) {
|
||||
|
@ -48,20 +48,5 @@ module.exports = {
|
|||
}
|
||||
return '[[[[ no name ]]]]'
|
||||
}
|
||||
b.findRealNameFromUUID = (name) => {
|
||||
if (b.players[name]) {
|
||||
return b.players[name].realName
|
||||
} else {
|
||||
return '[[[[ no name ]]]]'
|
||||
}
|
||||
}
|
||||
b.findDisplayName = (name) => {
|
||||
if (b.players[name]) {
|
||||
const displayName = b.players[name].displayName.split(' ')
|
||||
return displayName[displayName.length - 1]
|
||||
} else {
|
||||
return '[[[[ No display name ]]]]'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,18 +1,15 @@
|
|||
const index = require('../index.js')
|
||||
module.exports={
|
||||
load:()=>{
|
||||
},
|
||||
loadBot:(b)=>{
|
||||
b._client.on("end",()=>{
|
||||
b.info("bot "+b.id+" disconnected");
|
||||
for(const i in b.interval){
|
||||
clearInterval(b.interval[i])
|
||||
}
|
||||
setTimeout(()=>{
|
||||
b.info("Re-connecting bot "+b.id)
|
||||
const b_id = b.id;
|
||||
index.createBot(b.host,b.id);
|
||||
},5000)
|
||||
})
|
||||
}
|
||||
module.exports = {
|
||||
load: (b) => {
|
||||
b._client.on('end', () => {
|
||||
b.info(`Bot ${b.id} disconnected`)
|
||||
for (const i in b.interval) {
|
||||
clearInterval(b.interval[i])
|
||||
}
|
||||
setTimeout(() => {
|
||||
b.info(`Re-connecting bot ${b.id}`)
|
||||
index.createBot(b.host, b.id)
|
||||
}, 5000)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ module.exports = {
|
|||
b.sc_tasks = {}
|
||||
b.selfcareRun = 0
|
||||
b.interval.sc = setInterval(() => {
|
||||
if (Date.now() - b.selfcareRun <= 600) {
|
||||
if(Date.now() - b.selfcareRun <= 600){
|
||||
return
|
||||
}
|
||||
for (const i in b.sc_tasks) {
|
||||
|
@ -76,8 +76,7 @@ module.exports = {
|
|||
b.sc_tasks.respawn.failed = 0
|
||||
})
|
||||
b.on('chat', (data) => {
|
||||
if (data.json.translate === 'chat.disabled.options' || (data.json.extra && data.json.extra[0] && data.json.extra[0].translate === 'chat.disabled.options') ||
|
||||
data.json.translate === 'Chat disabled in client options' || (data.json.extra && data.json.extra[0] && data.json.extra[0].translate === 'Chat disabled in client options')) {
|
||||
if (data.json.translate === 'chat.disabled.options' || (data.json.extra && data.json.extra[0] && data.json.extra[0].translate === 'chat.disabled.options')) {
|
||||
b.sc_tasks.respawn.failed = 1
|
||||
}
|
||||
})
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
module.exports = {
|
||||
load: (b) => {
|
||||
|
||||
}
|
||||
load: (b) => {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,25 +1,42 @@
|
|||
//HOW TO WRITE CLASS JS
|
||||
const parse = require("../util/chatparse.js");
|
||||
const settings = require("../settings.json");
|
||||
class Command{
|
||||
constructor (uuid,user,nick,cmd,prefix,bot,verify,lang = settings.defaultLang){
|
||||
this.send = (text,uuid)=>{bot.tellraw(uuid?uuid:"@a",text)};
|
||||
this.reply = text => bot.tellraw(uuid,text);
|
||||
this.uuid = uuid;
|
||||
this.username = user;
|
||||
this.nickname = nick;
|
||||
this.command = cmd;
|
||||
this.prefix = prefix;
|
||||
this.bot = bot;
|
||||
this.type = 'minecraft';
|
||||
this.index = bot.id;
|
||||
this.args = cmd.split(' ').slice(1);
|
||||
this.verify = verify;
|
||||
this.host = bot.host.host;
|
||||
this.port = bot.host.port;
|
||||
this.lang = lang;
|
||||
this.colors = settings.colors;
|
||||
}
|
||||
// HOW TO WRITE CLASS JS
|
||||
const settings = require('../settings.json')
|
||||
class Command {
|
||||
constructor (uuid, user, nick, cmd, prefix, bot, verify, prefs) {
|
||||
this.send = (text, uuid) => { bot.tellraw(uuid || '@a', text) }
|
||||
this.reply = text => bot.tellraw(uuid, text)
|
||||
this.uuid = uuid
|
||||
this.username = user
|
||||
this.nickname = nick
|
||||
this.command = cmd
|
||||
this.prefix = prefix
|
||||
this.bot = bot
|
||||
this.type = 'minecraft'
|
||||
this.index = bot.id
|
||||
this.args = cmd.split(' ').slice(1)
|
||||
this.verify = verify
|
||||
this.host = bot.host.host
|
||||
this.port = bot.host.port
|
||||
// this.lang = lang
|
||||
this.prefs = prefs
|
||||
if(prefs.lang){
|
||||
this.lang = prefs.lang
|
||||
} else {
|
||||
this.lang = settings.defaultLang
|
||||
}
|
||||
|
||||
let _colors = {}
|
||||
if(prefs.colorPrimary){
|
||||
_colors.primary = prefs.colorPrimary
|
||||
} else {
|
||||
_colors.primary = settings.colors.primary
|
||||
}
|
||||
if(prefs.colorSecondary){
|
||||
_colors.secondary = prefs.colorSecondary
|
||||
} else {
|
||||
_colors.secondary = settings.colors.secondary
|
||||
}
|
||||
this.colors = _colors
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Command;
|
||||
module.exports = Command
|
||||
|
|
|
@ -1,58 +1,28 @@
|
|||
//HOW TO WRITE CLASS JS
|
||||
// HOW TO WRITE CLASS JS
|
||||
const index = require('../index.js')
|
||||
const { cmds } = require('../plugins/command.js');
|
||||
const parse = require("../util/chatparse.js");
|
||||
const settings = require("../settings.json");
|
||||
const getMessage = require('../util/lang.js');
|
||||
const lang=settings.defaultLang;
|
||||
class ConsoleCommand{
|
||||
constructor (cmd,index2){
|
||||
this.send = ()=>{}; //not needed for console
|
||||
this.reply = text => process.stdout.write(parse(text)[0]+'\n');
|
||||
this.uuid = 'dde5a2a6-ebdd-4bbb-8eac-f75b10c10446_console'; //hard-coded because uuid does not exist at console
|
||||
this.username = 'Owner';
|
||||
this.nickname = 'Console';
|
||||
this.command = cmd;
|
||||
this.prefix = ''; //prefix does not exist at console
|
||||
this.bot = index2 >= 0 ? index.bot[index2] : {
|
||||
printHelp:()=>{
|
||||
let helpCmds=[];
|
||||
for(const i in cmds){
|
||||
//if(cmds[i].hidden) continue;
|
||||
helpCmds.push(i)
|
||||
}
|
||||
console.log(getMessage(lang,"command.help.cmdList",[helpCmds.join(" ")]))
|
||||
},
|
||||
printCmdHelp:(uuid,cmd)=>{
|
||||
let usage=getMessage(lang,`command.${cmd}.usage`).split("||");
|
||||
let desc=getMessage(lang,`command.${cmd}.desc`);
|
||||
if(cmds[cmd].usage){
|
||||
usage=cmds[cmd].usage.split("||");
|
||||
}
|
||||
if(cmds[cmd].desc){
|
||||
desc=cmds[cmd].desc;
|
||||
}
|
||||
for(const i in usage){
|
||||
console.log(getMessage(lang,"command.help.commandUsage",[cmd,usage[i]]));
|
||||
}
|
||||
console.log(getMessage(lang,"command.help.commandDesc",[desc]));
|
||||
const permsN=getMessage(lang,"command.help.permsNormal");
|
||||
const permsT=getMessage(lang,"command.help.permsTrusted");
|
||||
const permsO=getMessage(lang,"command.help.permsOwner");
|
||||
const permsC=getMessage(lang,"command.help.permsConsole");
|
||||
const rPerms=cmds[cmd].level?cmds[cmd].level:0;
|
||||
console.log(getMessage(lang,"command.help.commandPerms",[[permsN,permsT,permsO,permsC][rPerms]]));
|
||||
}
|
||||
}; //bot does not exist at console
|
||||
this.type = 'console';
|
||||
this.index = index2;
|
||||
this.args = cmd.split(' ').slice(1);
|
||||
this.verify = 3;
|
||||
this.host = "";
|
||||
this.port = "3"; // :3
|
||||
this.lang = settings.defaultLang;
|
||||
this.colors = settings.colors;
|
||||
}
|
||||
const parse = require('../util/chatparse_console.js')
|
||||
const settings = require('../settings.json')
|
||||
class ConsoleCommand {
|
||||
constructor (cmd, index2) {
|
||||
this.send = () => {} // not needed for console
|
||||
this.reply = text => process.stdout.write(parse(text) + '\n')
|
||||
this.uuid = 'dde5a2a6-ebdd-7bbb-8eac-f75b10c10446' // hard-coded because uuid does not exist at console
|
||||
this.username = 'Owner'
|
||||
this.nickname = 'Console'
|
||||
this.command = cmd
|
||||
this.prefix = '' // prefix does not exist at console
|
||||
this.bot = index2 >= 0
|
||||
? index.bot[index2]
|
||||
: {}
|
||||
this.type = 'console'
|
||||
this.index = index2
|
||||
this.args = cmd.split(' ').slice(1)
|
||||
this.verify = 3
|
||||
this.host = ''
|
||||
this.port = '3' // :3
|
||||
this.lang = settings.defaultLang
|
||||
this.colors = settings.colors
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ConsoleCommand;
|
||||
module.exports = ConsoleCommand
|
||||
|
|
|
@ -70,25 +70,23 @@ const parse = function (_data, l = 0, resetColor = consoleColors.reset) {
|
|||
if (typeof _text === 'number') {
|
||||
_text = _text.toString()
|
||||
}
|
||||
out += _text.replaceAll('\x1b', '').replaceAll('\x0e', '')
|
||||
out += _text.replaceAll('\x1b', '').replaceAll('\x0e', '') // Remove escape codes and [SO] from console format
|
||||
}
|
||||
if (data.translate) {
|
||||
let trans = data.translate.replaceAll('%%', '\ud900\ud801').replaceAll('\x1b', '').replaceAll('\x0e', '')
|
||||
let trans = data.translate.replace(/%%/g, '\ue123').replaceAll('\x1b', '').replaceAll('\x0e', '') // Remove escape codes from console format
|
||||
if (lang[trans] !== undefined) {
|
||||
trans = lang[trans].replace(/%%/g, '\ue123')
|
||||
}
|
||||
if(data.with){
|
||||
data.with.forEach((item, i) => {
|
||||
const j2 = parse(item, l + 1, data.color ? processColor(data.color, resetColor) : resetColor)
|
||||
trans = trans.replace(/%s/, j2.replaceAll('%s', '\ud900\ud804').replaceAll('$s', '\ud900\ud805'))
|
||||
trans = trans.replaceAll(`%${+i + 1}$s`, j2.replaceAll('%s', '\ud900\ud804').replaceAll('$s', '\ud900\ud805'))
|
||||
})
|
||||
for (const i in data.with) {
|
||||
const j2 = parse(data.with[i], l + 1, data.color ? processColor(data.color, resetColor) : resetColor)
|
||||
trans = trans.replace(/%s/, j2.replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
||||
trans = trans.replaceAll(`%${+i + 1}$s`, j2.replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
||||
}
|
||||
out += trans.replaceAll('\ud900\ud801', '%').replaceAll('\ud900\ud804', '%s').replaceAll('\ud900\ud805', '$s')
|
||||
out += trans.replace(/\ue123/g, '%').replace(/\ue124/g, '%s').replace(/\ue125/g, '$s')
|
||||
}
|
||||
if (data.extra) {
|
||||
for (const item of data.extra) {
|
||||
const parsed = parse(item, l, data.color ? processColor(data.color, resetColor) : resetColor)
|
||||
for (const i in data.extra) {
|
||||
const parsed = parse(data.extra[i], l, data.color ? processColor(data.color, resetColor) : resetColor)
|
||||
out += parsed
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,14 +31,14 @@ const parse = function (_data, l = 0) {
|
|||
}
|
||||
for (const i in data.with) {
|
||||
const j2 = parse(data.with[i], l + 1)
|
||||
trans = trans.replace(/%s/, j2.replaceAll('%s', '\ud900\ud804').replaceAll('$s', '\ud900\ud805'))
|
||||
trans = trans.replaceAll(`%${+i + 1}$s`, j2.replaceAll('%s', '\ud900\ud804').replaceAll('$s', '\ud900\ud805'))
|
||||
trans = trans.replace(/%s/, j2.replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
||||
trans = trans.replaceAll(`%${+i + 1}$s`, j2.replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
||||
}
|
||||
out += trans.replaceAll('\ud900\ud801', '%').replaceAll('\ud900\ud804', '%s').replaceAll('\ud900\ud805', '$s')
|
||||
out += trans.replace(/\ue123/g, '%').replace(/\ue124/g, '%s').replace(/\ue125/g, '$s')
|
||||
}
|
||||
if (data.extra) {
|
||||
for (const item of data.extra) {
|
||||
const parsed = parse(item, l)
|
||||
for (const i in data.extra) {
|
||||
const parsed = parse(data.extra[i], l)
|
||||
out += parsed
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
const fs = require('fs')
|
||||
const cmds = Object.create(null)
|
||||
const bpl = fs.readdirSync('./commands')
|
||||
for (const plugin of bpl) {
|
||||
if (!plugin.endsWith('.js')) {
|
||||
for (const i in bpl) {
|
||||
if (!bpl[i].endsWith('.js')) {
|
||||
continue
|
||||
}
|
||||
try {
|
||||
const commandName = plugin.split('.js')[0]
|
||||
cmds[commandName] = require(`../commands/${plugin}`)
|
||||
const commandName = bpl[i].split('.js')[0]
|
||||
cmds[commandName] = require(`../commands/${bpl[i]}`)
|
||||
if (cmds[commandName].level === undefined) {
|
||||
cmds[commandName].level = 0
|
||||
}
|
||||
if (cmds[commandName].aliases) {
|
||||
for (const alias of cmds[commandName].aliases) {
|
||||
cmds[alias] = {
|
||||
for (const j in cmds[commandName].aliases) {
|
||||
cmds[cmds[commandName].aliases[j]] = {
|
||||
execute: cmds[commandName].execute,
|
||||
alias: commandName,
|
||||
usage: cmds[commandName].usage,
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
const crypto=require("crypto");
|
||||
const settings = require("../settings.json");
|
||||
const secret = require(settings.secret);
|
||||
const crypto = require('crypto')
|
||||
const settings = require('../settings.json')
|
||||
const secret = require(settings.secret)
|
||||
module.exports = function (cmd) {
|
||||
const cmdWithoutHash=cmd.slice(0,cmd.length-1).join(" ");
|
||||
const _dateString=Date.now().toString();
|
||||
const dateString=_dateString.slice(0,_dateString.length-4);
|
||||
const hashTrusted="babyboom:"+secret.keyTrusted+":"+cmdWithoutHash+":"+dateString
|
||||
const hashOwner="babyboom:"+secret.keyOwner+":"+cmdWithoutHash+":"+dateString
|
||||
const validhashT=crypto.createHash("sha256").update(hashTrusted).digest("hex");
|
||||
const validhashO=crypto.createHash("sha256").update(hashOwner).digest("hex");
|
||||
if(cmd[cmd.length-1]==validhashT){
|
||||
return 1;
|
||||
const cmdWithoutHash = cmd.slice(0, cmd.length - 1).join(' ')
|
||||
const _dateString = Date.now().toString()
|
||||
const dateString = _dateString.slice(0, _dateString.length - 4)
|
||||
const hashTrusted = `babyboom:${secret.keyTrusted}:${cmdWithoutHash}:${dateString}`
|
||||
const hashOwner = `babyboom:${secret.keyOwner}:${cmdWithoutHash}:${dateString}`
|
||||
const validhashT = crypto.createHash('sha256').update(hashTrusted).digest('hex')
|
||||
const validhashO = crypto.createHash('sha256').update(hashOwner).digest('hex')
|
||||
if (cmd[cmd.length - 1] === validhashT) {
|
||||
return 1
|
||||
}
|
||||
if(cmd[cmd.length-1]==validhashO){
|
||||
return 2;
|
||||
if (cmd[cmd.length - 1] === validhashO) {
|
||||
return 2
|
||||
}
|
||||
return 0;
|
||||
return 0
|
||||
}
|
||||
|
|
66
util/lang.js
66
util/lang.js
|
@ -1,27 +1,63 @@
|
|||
const fs=require("fs")
|
||||
let languages={};
|
||||
const fs = require('fs')
|
||||
const languages = {}
|
||||
|
||||
const loadplug = (botno) => {
|
||||
const bpl = fs.readdirSync('util/lang')
|
||||
for (const i in bpl) {
|
||||
if (!bpl[i].endsWith('.json')) {
|
||||
continue
|
||||
}
|
||||
try {
|
||||
languages[bpl[i].split(".")[0]]=require(`./lang/${bpl[i]}`)
|
||||
} catch (e) { console.log(e) }
|
||||
if (!bpl[i].endsWith('.json')) {
|
||||
continue
|
||||
}
|
||||
try {
|
||||
languages[bpl[i].split('.')[0]] = require(`./lang/${bpl[i]}`)
|
||||
} catch (e) { console.log(e) }
|
||||
}
|
||||
}
|
||||
loadplug()
|
||||
module.exports = function (l, msg, with2) {
|
||||
let message=msg.replace(/%%/g, '\ue123');
|
||||
if (languages[l][message] !== undefined) {
|
||||
|
||||
const getMessage = function (l, msg, with2) {
|
||||
let message = msg.replace(/%%/g, '\ue123')
|
||||
if (languages[l] && languages[l][message] !== undefined) {
|
||||
message = languages[l][message].replace(/%%/g, '\ue123')
|
||||
} else if (languages["en-US"][message] !== undefined) {
|
||||
message = languages["en-US"][message].replace(/%%/g, '\ue123')
|
||||
} else if (languages['en-US'] && languages['en-US'][message] !== undefined) {
|
||||
message = languages['en-US'][message].replace(/%%/g, '\ue123')
|
||||
}
|
||||
for(i in with2){
|
||||
for (const i in with2) {
|
||||
message = message.replace(/%s/, with2[i].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
||||
message = message.replaceAll(`%${+i+1}$s`, with2[i].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
||||
message = message.replaceAll(`%${+i + 1}$s`, with2[i].replace(/%s/g, '\ue124').replace(/\$s/g, '\ue125'))
|
||||
}
|
||||
return message.replace(/\ue123/g, '%').replace(/\ue124/g, '%s').replace(/\ue125/g, '$s')
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
languages: Object.keys(languages),
|
||||
getMessage,
|
||||
formatTime: function (time, language) {
|
||||
let finalString = ''
|
||||
const seconds = Math.floor(time / 1000) % 60
|
||||
const minutes = Math.floor(time / 60000) % 60
|
||||
const hours = Math.floor(time / 3600000) % 24
|
||||
const days = Math.floor(time / 86400000) % 7
|
||||
const weeks = Math.floor(time / 604800000)
|
||||
if (weeks !== 0) {
|
||||
finalString += weeks
|
||||
finalString += `${weeks === 1 ? getMessage(language, 'time.week') : getMessage(language, 'time.weekPlural')}`
|
||||
}
|
||||
if (days !== 0) {
|
||||
finalString += days
|
||||
finalString += `${days === 1 ? getMessage(language, 'time.day') : getMessage(language, 'time.dayPlural')}`
|
||||
}
|
||||
if (hours !== 0) {
|
||||
finalString += hours
|
||||
finalString += `${hours === 1 ? getMessage(language, 'time.hour') : getMessage(language, 'time.hourPlural')}`
|
||||
}
|
||||
if (minutes !== 0) {
|
||||
finalString += minutes
|
||||
finalString += `${minutes === 1 ? getMessage(language, 'time.minute') : getMessage(language, 'time.minutePlural')}`
|
||||
}
|
||||
if (seconds !== 0) {
|
||||
finalString += seconds
|
||||
finalString += `${seconds === 1 ? getMessage(language, 'time.second') : getMessage(language, 'time.secondPlural')}`
|
||||
}
|
||||
return finalString
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"language.name": "English",
|
||||
"language.region": "United States",
|
||||
"time.week": " week ",
|
||||
"time.weekPlural": " weeks ",
|
||||
"time.day": " day ",
|
||||
|
@ -27,8 +29,6 @@
|
|||
"command.refill.desc": "Refill core",
|
||||
"command.say.usage": " <message>",
|
||||
"command.say.desc": "Sends a message to chat",
|
||||
"command.serverinfo.usage": "",
|
||||
"command.serverinfo.desc": "Get system/bot info",
|
||||
"command.stop.usage": "",
|
||||
"command.stop.desc": "Restart bot",
|
||||
"command.template.usage": " <required> [optional]",
|
||||
|
@ -42,7 +42,6 @@
|
|||
"command.about.preRelease": "This is prerelease software - there may be errors, and features may be changed or removed at any time.",
|
||||
"command.about.sourceCode": "Source code: %s",
|
||||
"command.about.sourceCode.openInBrowser": "Click to open the source code link in your default browser",
|
||||
"command.about.serverinfo": "To view system information, run the command %s.",
|
||||
"command.cloop.error.tooShort": "Command loops must have a rate above 20ms.",
|
||||
"command.cloop.error.subcommand": "Unknown subcommand, please do %s",
|
||||
"command.cloop.success.add": "Added command loop with command %s and rate %s",
|
||||
|
@ -59,26 +58,36 @@
|
|||
"command.help.permsOwner": "Owner",
|
||||
"command.help.permsConsole": "Console",
|
||||
"command.help.noCommand": "Command does not exist",
|
||||
"command.serverinfo.os.android": "Android",
|
||||
"command.serverinfo.os.freebsd": "FreeBSD",
|
||||
"command.serverinfo.os.linux": "Linux %s",
|
||||
"command.serverinfo.os.macos": "macOS",
|
||||
"command.serverinfo.os.macos_old": "OS X",
|
||||
"command.serverinfo.os": "Operating system",
|
||||
"command.serverinfo.processor": "CPU",
|
||||
"command.serverinfo.arch": "Architecture",
|
||||
"command.serverinfo.osUsername": "Username",
|
||||
"command.serverinfo.hostName": "Hostname",
|
||||
"command.serverinfo.workingDir": "Working directory",
|
||||
"command.serverinfo.runTime": "Bot uptime",
|
||||
"command.serverinfo.upTime": "System uptime",
|
||||
"command.serverinfo.nodeVersion": "Node.js version",
|
||||
"command.serverinfo.osRelease": "Linux release",
|
||||
"command.serverinfo.osRelease.missing": "/etc/os-release does not exist. Information may be limited.",
|
||||
"command.serverinfo.os.android.version": "Android version",
|
||||
"command.serverinfo.os.android.model": "Device model",
|
||||
"command.serverinfo.botName": "Bot name",
|
||||
"command.serverinfo.botVer": "Bot version",
|
||||
"command.help.alias": "Alias to %s",
|
||||
"command.netmsg.disabled": "This command has been disabled on this server.",
|
||||
"command.settings.get.colorPrimary": "Primary color",
|
||||
"command.settings.get.colorSecondary": "Secondary color",
|
||||
"command.settings.get.language": "Language",
|
||||
"command.settings.setLanguage": "Run %s to set this as your language",
|
||||
"command.settings.error.invalidKey": "Invalid key",
|
||||
"command.settings.error.invalidLanguage": "Invalid language",
|
||||
"command.settings.error.mustProvideValue": "You must provide a value",
|
||||
"command.about.serverInfo.os.android": "Android %s",
|
||||
"command.about.serverInfo.os.android.noVersion": "Android",
|
||||
"command.about.serverInfo.os.freebsd": "FreeBSD %s",
|
||||
"command.about.serverInfo.os.linux": "Linux %s",
|
||||
"command.about.serverInfo.os.macos": "macOS",
|
||||
"command.about.serverInfo.os.macos_old": "OS X",
|
||||
"command.about.serverInfo.os": "Operating system",
|
||||
"command.about.serverInfo.processor": "CPU",
|
||||
"command.about.serverInfo.arch": "Architecture",
|
||||
"command.about.serverInfo.osUsername": "Username",
|
||||
"command.about.serverInfo.hostName": "Hostname",
|
||||
"command.about.serverInfo.workingDir": "Working directory",
|
||||
"command.about.serverInfo.runTime": "Bot uptime",
|
||||
"command.about.serverInfo.upTime": "System uptime",
|
||||
"command.about.serverInfo.nodeVersion": "Node.js version",
|
||||
"command.about.serverInfo.osRelease": "Linux release",
|
||||
"command.about.serverInfo.osRelease.missing": "/etc/os-release does not exist. Information may be limited.",
|
||||
"command.about.serverInfo.os.android.version": "Android version",
|
||||
"command.about.serverInfo.os.android.model": "Device model",
|
||||
"command.about.serverInfo.botName": "Bot name",
|
||||
"command.about.serverInfo.botVer": "Bot version",
|
||||
"command.tpr.success": "Teleporting %s to %s, %s, %s",
|
||||
"command.verify.success": "Successfully verified with permission level %s",
|
||||
"command.error": "An error occured (check console for more info)",
|
||||
|
|
|
@ -1,22 +1,38 @@
|
|||
const rsg=function(count){
|
||||
let output="";
|
||||
for(let i=0; i<count; i++){
|
||||
let rng=Math.floor(Math.random()*16)+1;
|
||||
if(rng==7) rng=17; //No bells
|
||||
if(rng==10) rng=18; //No line feeds
|
||||
if(rng==11) rng=19; //No vertical tabulations
|
||||
if(rng==12) rng=20; //No form feed
|
||||
if(rng==13) rng=21; //No carriage returns
|
||||
if(rng==14) rng=22; //No shift out
|
||||
if(rng==15) rng=23; //No shift in
|
||||
output+=String.fromCharCode(rng)
|
||||
const rsg = function (count) {
|
||||
let output = ''
|
||||
for (let i = 0; i < count; i++) {
|
||||
const type = Math.floor(Math.random() * 6)
|
||||
switch (type) {
|
||||
case 0:
|
||||
output += ' '
|
||||
break
|
||||
case 1:
|
||||
output += '§§'
|
||||
break
|
||||
case 2:
|
||||
output += '§ '
|
||||
break
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:{ // Make this case more likely
|
||||
let rng = Math.floor(Math.random() * 16) + 1
|
||||
if (rng === 7) rng = 17 // No bells
|
||||
if (rng === 10) rng = 18 // No line feeds
|
||||
if (rng === 11) rng = 19 // No vertical tabulations
|
||||
if (rng === 12) rng = 20 // No form feed
|
||||
if (rng === 13) rng = 21 // No carriage returns
|
||||
if (rng === 14) rng = 22 // No shift out
|
||||
if (rng === 15) rng = 23 // No shift in
|
||||
output += `§${String.fromCharCode(rng)}`
|
||||
}
|
||||
}
|
||||
}
|
||||
return output;
|
||||
return output
|
||||
}
|
||||
module.exports = function (legal) {
|
||||
if(legal){
|
||||
return Math.floor(Math.random()*1000000).toString()
|
||||
if (legal) {
|
||||
return Math.floor(Math.random() * 1000000).toString()
|
||||
} else {
|
||||
return " \xa7"+rsg(6)+" "+rsg(4)
|
||||
return rsg(6 + Math.floor(Math.random() * 3))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
module.exports = function (uuid) {
|
||||
const split_uuid = uuid.replace(/[^0-9a-f]/g, '').replace(/.{1,8}/g, a => { return '0x' + a }).match(/.{1,10}/g)
|
||||
const num_uuid = [+split_uuid[0] << 0, +split_uuid[1] << 0, +split_uuid[2] << 0, +split_uuid[3] << 0]
|
||||
return num_uuid
|
||||
const splitUUID = uuid.replace(/[^0-9a-f]/g, '').replace(/.{1,8}/g, a => { return `0x${a}` }).match(/.{1,10}/g)
|
||||
const numUUID = [+splitUUID[0] << 0, +splitUUID[1] << 0, +splitUUID[2] << 0, +splitUUID[3] << 0]
|
||||
return numUUID
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"botName": "botvX Dev",
|
||||
"botVersion": "10.0.0",
|
||||
"botVersion": "10.0.0-beta.2",
|
||||
"botAuthor": "a5a06d596f15c7db",
|
||||
"isPreRelease": true,
|
||||
"sourceURL": "https://code.chipmunk.land/7cc5c4f330d47060/botvX"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue