Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.10 KB | None | 0 0
  1. const commando = require('discord.js-commando');
  2. const r = require('rethinkdb');
  3.  
  4. const asyncForEach = async (array, callback) => {
  5. for (let index = 0; index < array.length; index++) {
  6. await callback(array[index], index, array);
  7. }
  8. }
  9.  
  10. const callback = async function(err, result) {
  11. if (err) {
  12. console.warn('error', err);
  13. console.warn('error_result', result);
  14. } else { return result; }
  15. }
  16.  
  17. class rdb {
  18. /*
  19. constructor(client) {
  20. super(client, 'dank');
  21. }
  22.  
  23. validate(val) {
  24. return val.toLowerCase() === 'dank';
  25. }
  26.  
  27. parse(val) {
  28. return val;
  29. }
  30. */
  31.  
  32. // https://rethinkdb.com/api/javascript/
  33. // https://github.com/neumino/chateau/blob/master/routes/api.js
  34. static async contains(sequence, value) { return await r.contains(sequence, value); }
  35.  
  36. static async empty(database = 'nedm', table) {
  37. return r.connect({}, callback).then(async conn => {
  38. const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('empty error', err) : ''); return status; };
  39. let db = await r.db(database).table(table).delete().run(conn, callback).then(closeConnection.bind(true), closeConnection.bind(false));
  40. }).catch(err => { console.warn(err); return false; });
  41. }
  42.  
  43. static expr(value) { return r.expr(value); }
  44.  
  45. static async insert(database = 'nedm', table, row) {
  46. return r.connect({}, callback).then(async conn => {
  47. const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('insert error', err) : ''); return status; };
  48. return await r.db(database).table(table).insert(row).run(conn, callback).then(closeConnection.bind(true), closeConnection.bind(false));
  49. }).catch(err => { console.warn(err); return false; });
  50. }
  51.  
  52. static async isEmpty(database = 'nedm', table) {
  53. return r.connect({}, callback).then(async conn => {
  54. const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('isempty error', err) : ''); return status; };
  55. return await r.db(database).table(table).isEmpty().run(conn, callback).then(closeConnection.bind(true), closeConnection.bind(false));
  56. }).catch(err => { console.warn(4, err); return false; });
  57. }
  58.  
  59. static async merge(value) { return this.merge(value); }
  60.  
  61. static async remove(database = 'nedm', table, row) {
  62. return r.connect({}, callback).then(async conn => {
  63. const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('remove error', err) : ''); return status; };
  64. let db = await r.db(database).table(table).filter(row).delete().run(conn, callback).then(closeConnection.bind(true), closeConnection.bind(false));
  65. return db;
  66. }).catch(err => { console.warn(err); return false; });
  67. }
  68.  
  69. static async run(conn, callback) { return this.run(conn, callback); }
  70.  
  71. static async select(database = 'nedm', table, index, value) {
  72. if (typeof index === 'string') index = { index: index };
  73. //if (typeof values === 'string') values = [].concat([ values ], index);
  74. return r.connect({}, callback).then(async conn => {
  75. const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('select error', err) : ''); return status; };
  76. let db = await r.db(database).table(table).getAll(value, index).run(conn, callback);
  77. let data = [];
  78. if (!await this.isEmpty(database, table)) { data = await db.toArray(function(err, results) { if (err) { console.log('select error2', err); } else { return results; } }); }
  79. conn.close();
  80. return data;
  81. }).catch(err => { console.warn(err); return false; });
  82. }
  83.  
  84. static async selectAll(database = 'nedm', table) {
  85. return r.connect({}, callback).then(async conn => {
  86. let db = await r.db(database).table(table).run(conn, callback);
  87. let data = [];
  88. if (!await this.isEmpty(database, table)) { data = await db.toArray(function(err, results) { if (err) { console.log('selectAll error2', err); } else { return results; } }); }
  89. conn.close();
  90. return data;
  91. }).catch(err => { console.warn(err); return false; });
  92. }
  93.  
  94. static async selectFilter(database = 'nedm', table, index, value, filters) {
  95. if (typeof index === 'string') index = { index: index };
  96. //if (typeof values === 'string') values = [].concat([ values ], index);
  97. return r.connect({}, callback).then(async conn => {
  98. const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('selectFilter error', err) : ''); return status; };
  99. let db = await r.db(database).table(table).getAll(value, index);
  100. if (filters) { await asyncForEach(filters, async (filter, index) => {
  101. // https://rethinkdb.com/api/javascript/
  102. if (typeof filter === 'object' && !Array.isArray(filter) && 'append' in filter) { db = await db.append(filter.append); }
  103. else if (typeof filter === 'object' && !Array.isArray(filter) && 'avg' in filter) { db = await db.avg(filter.avg); }
  104. else if (typeof filter === 'object' && !Array.isArray(filter) && 'changeAt' in filter) { db = await db.changeAt(filter.changeAt[0], filter.changeAt[1]); }
  105. else if (typeof filter === 'object' && !Array.isArray(filter) && 'coerceTo' in filter) { db = await db.coerceTo(filter.coerceTo); }
  106. else if (typeof filter === 'object' && !Array.isArray(filter) && 'concatMap' in filter) { db = await db.concatMap(filter.concatMap); }
  107. else if (typeof filter === 'object' && !Array.isArray(filter) && 'contains' in filter) { db = await db.contains(filter.contains); }
  108. else if (typeof filter === 'object' && !Array.isArray(filter) && 'count' in filter) { db = await db.count(filter.count); } // https://rethinkdb.com/api/javascript/count/
  109. else if (typeof filter === 'object' && !Array.isArray(filter) && 'deleteAt' in filter) {
  110. if (Array.isArray(filter.deleteAt) && filter.deleteAt.length === 1) db = await db.deleteAt(filter.deleteAt[0]);
  111. else if (Array.isArray(filter.deleteAt) && filter.deleteAt.length === 2) db = await db.deleteAt(filter.deleteAt[0], filter.deleteAt[1]);
  112. }
  113. else if (typeof filter === 'object' && !Array.isArray(filter) && 'difference' in filter) { db = await db.difference(filter.difference); }
  114. else if (typeof filter === 'object' && !Array.isArray(filter) && 'distinct' in filter) { db = await db.distinct(); }
  115. else if (typeof filter === 'object' && !Array.isArray(filter) && 'filter' in filter) { db = await db.filter(filter.filter); }
  116. else if (typeof filter === 'object' && !Array.isArray(filter) && 'fold' in filter) {
  117. if (Array.isArray(filter.fold) && filter.fold.length === 2) db = await db.fold(filter.fold[0], filter.fold[1]);
  118. else if (Array.isArray(filter.fold) && filter.fold.length === 3) db = await db.fold(filter.fold[0], filter.fold[1], filter.fold[2]);
  119. }
  120. else if (typeof filter === 'object' && !Array.isArray(filter) && 'getField' in filter) { db = await db.getField(filter.getField); }
  121. else if (typeof filter === 'object' && !Array.isArray(filter) && 'group' in filter) {
  122. if (Array.isArray(filter.group) && filter.group.length === 1) db = await db.group(filter.group[0]);
  123. else if (Array.isArray(filter.group) && filter.group.length === 2) db = await db.group(filter.group[0], filter.group[1]);
  124. else if (Array.isArray(filter.group) && filter.group.length === 3) db = await db.group(filter.group[0], filter.group[1], filter.group[2]);
  125. 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]);
  126. }
  127. else if (typeof filter === 'object' && !Array.isArray(filter) && 'hasFields' in filter) { db = await db.hasFields(filter.hasFields); }
  128. else if (typeof filter === 'object' && !Array.isArray(filter) && 'insertAt' in filter) { db = await db.insertAt(filter.insertAt[0], filter.insertAt[1]); }
  129. else if (typeof filter === 'object' && !Array.isArray(filter) && 'isEmpty' in filter) { db = await db.isEmpty(); }
  130. else if (typeof filter === 'object' && !Array.isArray(filter) && 'keys' in filter) { db = await db.keys(); }
  131. else if (typeof filter === 'object' && !Array.isArray(filter) && 'limit' in filter) { db = await db.limit(filter.limit); }
  132. else if (typeof filter === 'object' && !Array.isArray(filter) && 'map' in filter) { db = await db.map(filter.map); }
  133. else if (typeof filter === 'object' && !Array.isArray(filter) && 'max' in filter) { db = await db.max(filter.max); }
  134. // missing: merge
  135. else if (typeof filter === 'object' && !Array.isArray(filter) && 'min' in filter) { db = await db.min(filter.min); }
  136. else if (typeof filter === 'object' && !Array.isArray(filter) && 'nth' in filter) { db = await db.nth(filter.nth); }
  137. else if (typeof filter === 'object' && !Array.isArray(filter) && 'offsetsOf' in filter) { db = await db.offsetsOf(filter.offsetsOf); }
  138. else if (typeof filter === 'object' && !Array.isArray(filter) && 'orderBy' in filter) { db = await db.orderBy(filter.orderBy); }
  139. else if (typeof filter === 'object' && !Array.isArray(filter) && 'pluck' in filter) { db = await db.pluck(filter.pluck); }
  140. else if (typeof filter === 'object' && !Array.isArray(filter) && 'prepend' in filter) { db = await db.prepend(filter.prepend); }
  141. else if (typeof filter === 'object' && !Array.isArray(filter) && 'reduce' in filter) { db = await db.reduce(filter.reduce); }
  142. else if (typeof filter === 'object' && !Array.isArray(filter) && 'sample' in filter) { db = await db.sample(filter.sample); }
  143. else if (typeof filter === 'object' && !Array.isArray(filter) && 'setDifference' in filter) { db = await db.setDifference(filter.setDifference); }
  144. else if (typeof filter === 'object' && !Array.isArray(filter) && 'setInsert' in filter) { db = await db.setInsert(filter.setInsert); }
  145. else if (typeof filter === 'object' && !Array.isArray(filter) && 'setIntersection' in filter) { db = await db.setIntersection(filter.setIntersection); }
  146. else if (typeof filter === 'object' && !Array.isArray(filter) && 'setUnion' in filter) { db = await db.setUnion(filter.setUnion); }
  147. else if (typeof filter === 'object' && !Array.isArray(filter) && 'skip' in filter) { db = await db.skip(filter.skip); }
  148. else if (typeof filter === 'object' && !Array.isArray(filter) && 'slice' in filter) {
  149. if (Array.isArray(filter.slice) && filter.slice.length === 1) db = await db.slice(filter.slice[0]);
  150. else if (Array.isArray(filter.slice) && filter.slice.length === 2) db = await db.slice(filter.slice[0], filter.slice[1]);
  151. else if (Array.isArray(filter.slice) && filter.slice.length === 3) db = await db.slice(filter.slice[0], filter.slice[1], filter.slice[2]);
  152. 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]);
  153. }
  154. else if (typeof filter === 'object' && !Array.isArray(filter) && 'spliceAt' in filter) { db = await db.spliceAt(filter.spliceAt[0], filter.spliceAt[1]); }
  155. else if (typeof filter === 'object' && !Array.isArray(filter) && 'sum' in filter) { db = await db.sum(filter.sum); }
  156. else if (typeof filter === 'object' && !Array.isArray(filter) && 'toJSON' in filter) { db = await db.toJSON(); }
  157. else if (typeof filter === 'object' && !Array.isArray(filter) && 'toJsonString' in filter) { db = await db.toJsonString(); }
  158. else if (typeof filter === 'object' && !Array.isArray(filter) && 'ungroup' in filter) { db = await db.ungroup(); }
  159. else if (typeof filter === 'object' && !Array.isArray(filter) && 'values' in filter) { db = await db.values(); }
  160. else if (typeof filter === 'object' && !Array.isArray(filter) && 'withFields' in filter) { db = await db.withFields(filter.withFields); }
  161. else if (typeof filter === 'object' && !Array.isArray(filter) && 'without' in filter) { db = await db.without(filter.without); }
  162. }); }
  163. db = await db.run(conn, callback);
  164. let data = [];
  165. if (!await this.isEmpty(database, table)) { data = await db.toArray(function(err, results) { if (err) { console.log('selectFilter error2', err); } else { return results; } }); }
  166. conn.close();
  167. return data;
  168. }).catch(err => { console.warn(err); return false; });
  169. }
  170.  
  171. static async update(database = 'nedm', table, id, update) {
  172. console.log('update', database, table, id, update);
  173. return r.connect({}, callback).then(async conn => {
  174. const closeConnection = (status, err) => { conn.close(); /* if status===false then log the error: */ status || (err ? console.warn('update error', err) : ''); return status; };
  175. let db = await r.db(database).table(table).get(id).update(update).run(conn, callback);//.then(closeConnection.bind(true), closeConnection.bind(false));
  176. return db;
  177. }).catch(err => { console.warn(err); return false; });
  178. }
  179. }
  180.  
  181. module.exports = rdb;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement