228 lines
5.5 KiB
JavaScript
228 lines
5.5 KiB
JavaScript
require('dotenv').config();
|
|
|
|
globalThis.gBot = require('./src/Bot');
|
|
|
|
const level = require('level');
|
|
const MPPClient = require('./src/MPPClient');
|
|
|
|
globalThis.db = level("./bot2022.db");
|
|
|
|
let sendChat = MPPClient.sendChat;
|
|
|
|
db.getPokemon = function(id, cb) {
|
|
var key = "pokemon collection~"+id;
|
|
db.get(key, function(err, value) {
|
|
if(err || !value || value == "") {
|
|
cb([]);
|
|
return;
|
|
}
|
|
var result = [];
|
|
value = value.split("\xff");
|
|
for(var i = 0; i < value.length; i++) {
|
|
var v = value[i].trim();
|
|
if(v.length) result.push(v);
|
|
}
|
|
cb(result);
|
|
});
|
|
}
|
|
|
|
db.putPokemon = function(id, arr) {
|
|
var result = "";
|
|
for(var i = 0; i < arr.length; i++) {
|
|
var v = arr[i];
|
|
if(!v) continue;
|
|
v = v.trim();
|
|
if(v.length > 0) {
|
|
if(i) result += "\xff";
|
|
result += v;
|
|
}
|
|
}
|
|
var key = "pokemon collection~"+id;
|
|
if(result.length)
|
|
db.put(key, result);
|
|
else
|
|
db.del(key);
|
|
}
|
|
|
|
db.getTime = function(cb) {
|
|
db.get('time', (err, value) => {
|
|
if (err !== null) cb(err, value);
|
|
cb(undefined, value);
|
|
});
|
|
}
|
|
|
|
db.setTime = function(time) {
|
|
db.put('time', time);
|
|
}
|
|
|
|
db.readArray = function(start, end, cb) {
|
|
var results = [];
|
|
db.createReadStream({
|
|
start: start,
|
|
end: end
|
|
})
|
|
.on("data", function(data) {
|
|
results.push(data);
|
|
})
|
|
.on("end", function() {
|
|
cb(results);
|
|
});
|
|
};
|
|
|
|
function listArray(arr) {
|
|
var result = "";
|
|
for(var i = 0; i < arr.length; i++) {
|
|
if(i && i !== arr.length - 1) result += ", ";
|
|
if(i && i === arr.length - 1) result += ", and ";
|
|
result += arr[i];
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// tries to find the thing by text
|
|
// calls cb with undefined or entry
|
|
db.look = function(location, text, cb) {
|
|
text = text.toLowerCase().trim();
|
|
if(text == "") {
|
|
// "/look" with no search text
|
|
db.get("look."+location, function(err, value) {
|
|
var response = "";
|
|
if(err) response = "Well...";
|
|
else response = value;
|
|
var sel = "look."+location+".◍";
|
|
db.readArray(sel, sel+"\xff", function(results) {
|
|
var results = results.map(data=>data.key.substr(sel.length));
|
|
if(results.length) response += " There's "+listArray(results)+ ", about.";
|
|
sendChat(response);
|
|
});
|
|
});
|
|
} else {
|
|
var entry = undefined;
|
|
var sel = "look."+location+".";
|
|
db.createReadStream({
|
|
start: sel,
|
|
end: sel+"◍\xff"
|
|
})
|
|
.on("data", function(data) {
|
|
if(data.key.substr(sel.length).toLowerCase().indexOf(text) > -1) {
|
|
entry = data;
|
|
}
|
|
})
|
|
.on("end", function() {
|
|
cb(entry);
|
|
});
|
|
}
|
|
}
|
|
db.take = function(location, text, cb) {
|
|
text = text.toLowerCase().trim();
|
|
var sel = "look."+location+".◍";
|
|
var entry = undefined;
|
|
db.createReadStream({
|
|
start: sel,
|
|
end: sel+"\xff"
|
|
})
|
|
.on("data", function(data) {
|
|
if(data.key.substr(sel.length).toLowerCase().indexOf(text) > -1) {
|
|
entry = data;
|
|
}
|
|
})
|
|
.on("end", function() {
|
|
cb(entry);
|
|
});
|
|
}
|
|
|
|
db.getLocation = function(id, cb) {
|
|
var key = "location~"+id;
|
|
db.get(key, function(err, value) {
|
|
if(err || !value || value == "") {
|
|
return cb("outside");
|
|
}
|
|
return cb(value);
|
|
});
|
|
}
|
|
|
|
db.setLocation = function(id, location) {
|
|
if(!location || location === "") {
|
|
location = "outside";
|
|
}
|
|
db.put("location~"+id, location);
|
|
}
|
|
|
|
db.getFish = function(id, cb) {
|
|
var key = "fish sack~"+id;
|
|
db.get(key, function(err, value) {
|
|
if(err || !value || value == "") {
|
|
cb([]);
|
|
return;
|
|
}
|
|
var result = [];
|
|
value = value.split("\xff");
|
|
for(var i = 0; i < value.length; i++) {
|
|
var v = value[i].trim();
|
|
if(v.length) result.push(v);
|
|
}
|
|
cb(result);
|
|
});
|
|
}
|
|
|
|
db.putFish = function(id, arr) {
|
|
var result = "";
|
|
for(var i = 0; i < arr.length; i++) {
|
|
var v = arr[i];
|
|
if(!v) continue;
|
|
v = v.trim();
|
|
if(v.length > 0) {
|
|
if(i) result += "\xff";
|
|
result += v;
|
|
}
|
|
}
|
|
var key = "fish sack~"+id;
|
|
if(result.length)
|
|
db.put(key, result);
|
|
else
|
|
db.del(key);
|
|
}
|
|
|
|
db.appendFish = function(id, arr) {
|
|
db.getFish(id, function(myfish) {
|
|
myfish = myfish.concat(arr);
|
|
//console.log(id, myfish);
|
|
db.putFish(id, myfish);
|
|
});
|
|
}
|
|
|
|
db.getFruits = function(cb) {
|
|
var key = "kekklefruit tree";
|
|
db.get(key, function(err, value) {
|
|
if(err || !value || value == "") {
|
|
cb(0);
|
|
return;
|
|
}
|
|
cb(parseInt(value));
|
|
});
|
|
}
|
|
|
|
db.setFruits = function(num_fruits) {
|
|
var key = "kekklefruit tree";
|
|
db.put(key, num_fruits);
|
|
}
|
|
|
|
|
|
gBot.start(process.env.MPPCLONE_TOKEN);
|
|
|
|
process.stdin.on('data', data => {
|
|
let str = data.toString().trim();
|
|
if(str.length) {
|
|
MPPClient.client.sendArray([{
|
|
m: 'a',
|
|
message: str
|
|
}]);
|
|
}
|
|
});
|
|
|
|
process.on('SIGINT', async () => {
|
|
if (!db.isClosed()) {
|
|
await db.close();
|
|
}
|
|
});
|