Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const commando = require('discord.js-commando');
- const r = require('rethinkdb');
- const asyncForEach = async (array, callback) => {
- for (let index = 0; index < array.length; index++) {
- await callback(array[index], index, array);
- }
- }
- const callback = async function(err, result) {
- if (err) {
- console.warn('error', err);
- console.warn('error_result', result);
- } else { return result; }
- }
- class rdb {
- /*
- constructor(client) {
- super(client, 'dank');
- }
- validate(val) {
- return val.toLowerCase() === 'dank';
- }
- parse(val) {
- return val;
- }
- */
- // https://rethinkdb.com/api/javascript/
- // https://github.com/neumino/chateau/blob/master/routes/api.js
- static async contains(sequence, value) { return await r.contains(sequence, value); }
- static async empty(database = 'nedm', table) {
- return r.connect({}, callback).then(async conn => {
- const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('empty error', err) : ''); return status; };
- let db = await r.db(database).table(table).delete().run(conn, callback).then(closeConnection.bind(true), closeConnection.bind(false));
- }).catch(err => { console.warn(err); return false; });
- }
- static expr(value) { return r.expr(value); }
- static async insert(database = 'nedm', table, row) {
- return r.connect({}, callback).then(async conn => {
- const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('insert error', err) : ''); return status; };
- return await r.db(database).table(table).insert(row).run(conn, callback).then(closeConnection.bind(true), closeConnection.bind(false));
- }).catch(err => { console.warn(err); return false; });
- }
- static async isEmpty(database = 'nedm', table) {
- return r.connect({}, callback).then(async conn => {
- const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('isempty error', err) : ''); return status; };
- return await r.db(database).table(table).isEmpty().run(conn, callback).then(closeConnection.bind(true), closeConnection.bind(false));
- }).catch(err => { console.warn(4, err); return false; });
- }
- static async merge(value) { return this.merge(value); }
- static async remove(database = 'nedm', table, row) {
- return r.connect({}, callback).then(async conn => {
- const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('remove error', err) : ''); return status; };
- let db = await r.db(database).table(table).filter(row).delete().run(conn, callback).then(closeConnection.bind(true), closeConnection.bind(false));
- return db;
- }).catch(err => { console.warn(err); return false; });
- }
- static async run(conn, callback) { return this.run(conn, callback); }
- static async select(database = 'nedm', table, index, value) {
- if (typeof index === 'string') index = { index: index };
- //if (typeof values === 'string') values = [].concat([ values ], index);
- return r.connect({}, callback).then(async conn => {
- const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('select error', err) : ''); return status; };
- let db = await r.db(database).table(table).getAll(value, index).run(conn, callback);
- let data = [];
- if (!await this.isEmpty(database, table)) { data = await db.toArray(function(err, results) { if (err) { console.log('select error2', err); } else { return results; } }); }
- conn.close();
- return data;
- }).catch(err => { console.warn(err); return false; });
- }
- static async selectAll(database = 'nedm', table) {
- return r.connect({}, callback).then(async conn => {
- let db = await r.db(database).table(table).run(conn, callback);
- let data = [];
- if (!await this.isEmpty(database, table)) { data = await db.toArray(function(err, results) { if (err) { console.log('selectAll error2', err); } else { return results; } }); }
- conn.close();
- return data;
- }).catch(err => { console.warn(err); return false; });
- }
- static async selectFilter(database = 'nedm', table, index, value, filters) {
- if (typeof index === 'string') index = { index: index };
- //if (typeof values === 'string') values = [].concat([ values ], index);
- return r.connect({}, callback).then(async conn => {
- const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('selectFilter error', err) : ''); return status; };
- let db = await r.db(database).table(table).getAll(value, index);
- if (filters) { await asyncForEach(filters, async (filter, index) => {
- // https://rethinkdb.com/api/javascript/
- if (typeof filter === 'object' && !Array.isArray(filter) && 'append' in filter) { db = await db.append(filter.append); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'avg' in filter) { db = await db.avg(filter.avg); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'changeAt' in filter) { db = await db.changeAt(filter.changeAt[0], filter.changeAt[1]); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'coerceTo' in filter) { db = await db.coerceTo(filter.coerceTo); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'concatMap' in filter) { db = await db.concatMap(filter.concatMap); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'contains' in filter) { db = await db.contains(filter.contains); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'count' in filter) { db = await db.count(filter.count); } // https://rethinkdb.com/api/javascript/count/
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'deleteAt' in filter) {
- if (Array.isArray(filter.deleteAt) && filter.deleteAt.length === 1) db = await db.deleteAt(filter.deleteAt[0]);
- else if (Array.isArray(filter.deleteAt) && filter.deleteAt.length === 2) db = await db.deleteAt(filter.deleteAt[0], filter.deleteAt[1]);
- }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'difference' in filter) { db = await db.difference(filter.difference); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'distinct' in filter) { db = await db.distinct(); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'filter' in filter) { db = await db.filter(filter.filter); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'fold' in filter) {
- if (Array.isArray(filter.fold) && filter.fold.length === 2) db = await db.fold(filter.fold[0], filter.fold[1]);
- else if (Array.isArray(filter.fold) && filter.fold.length === 3) db = await db.fold(filter.fold[0], filter.fold[1], filter.fold[2]);
- }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'getField' in filter) { db = await db.getField(filter.getField); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'group' in filter) {
- if (Array.isArray(filter.group) && filter.group.length === 1) db = await db.group(filter.group[0]);
- else if (Array.isArray(filter.group) && filter.group.length === 2) db = await db.group(filter.group[0], filter.group[1]);
- else if (Array.isArray(filter.group) && filter.group.length === 3) db = await db.group(filter.group[0], filter.group[1], filter.group[2]);
- else if (Array.isArray(filter.group) && filter.group.length === 4) db = await db.group(filter.group[0], filter.group[1], filter.group[2], filter.group[3]);
- }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'hasFields' in filter) { db = await db.hasFields(filter.hasFields); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'insertAt' in filter) { db = await db.insertAt(filter.insertAt[0], filter.insertAt[1]); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'isEmpty' in filter) { db = await db.isEmpty(); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'keys' in filter) { db = await db.keys(); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'limit' in filter) { db = await db.limit(filter.limit); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'map' in filter) { db = await db.map(filter.map); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'max' in filter) { db = await db.max(filter.max); }
- // missing: merge
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'min' in filter) { db = await db.min(filter.min); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'nth' in filter) { db = await db.nth(filter.nth); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'offsetsOf' in filter) { db = await db.offsetsOf(filter.offsetsOf); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'orderBy' in filter) { db = await db.orderBy(filter.orderBy); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'pluck' in filter) { db = await db.pluck(filter.pluck); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'prepend' in filter) { db = await db.prepend(filter.prepend); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'reduce' in filter) { db = await db.reduce(filter.reduce); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'sample' in filter) { db = await db.sample(filter.sample); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'setDifference' in filter) { db = await db.setDifference(filter.setDifference); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'setInsert' in filter) { db = await db.setInsert(filter.setInsert); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'setIntersection' in filter) { db = await db.setIntersection(filter.setIntersection); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'setUnion' in filter) { db = await db.setUnion(filter.setUnion); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'skip' in filter) { db = await db.skip(filter.skip); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'slice' in filter) {
- if (Array.isArray(filter.slice) && filter.slice.length === 1) db = await db.slice(filter.slice[0]);
- else if (Array.isArray(filter.slice) && filter.slice.length === 2) db = await db.slice(filter.slice[0], filter.slice[1]);
- else if (Array.isArray(filter.slice) && filter.slice.length === 3) db = await db.slice(filter.slice[0], filter.slice[1], filter.slice[2]);
- else if (Array.isArray(filter.slice) && filter.slice.length === 4) db = await db.slice(filter.slice[0], filter.slice[1], filter.slice[2], filter.slice[3]);
- }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'spliceAt' in filter) { db = await db.spliceAt(filter.spliceAt[0], filter.spliceAt[1]); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'sum' in filter) { db = await db.sum(filter.sum); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'toJSON' in filter) { db = await db.toJSON(); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'toJsonString' in filter) { db = await db.toJsonString(); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'ungroup' in filter) { db = await db.ungroup(); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'values' in filter) { db = await db.values(); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'withFields' in filter) { db = await db.withFields(filter.withFields); }
- else if (typeof filter === 'object' && !Array.isArray(filter) && 'without' in filter) { db = await db.without(filter.without); }
- }); }
- db = await db.run(conn, callback);
- let data = [];
- if (!await this.isEmpty(database, table)) { data = await db.toArray(function(err, results) { if (err) { console.log('selectFilter error2', err); } else { return results; } }); }
- conn.close();
- return data;
- }).catch(err => { console.warn(err); return false; });
- }
- static async update(database = 'nedm', table, id, update) {
- console.log('update', database, table, id, update);
- return r.connect({}, callback).then(async conn => {
- const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('update error', err) : ''); return status; };
- let db = await r.db(database).table(table).get(id).update(update).run(conn, callback);//.then(closeConnection.bind(true), closeConnection.bind(false));
- return db;
- }).catch(err => { console.warn(err); return false; });
- }
- }
- module.exports = rdb;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement