Advertisement
Guest User

Type

a guest
Mar 3rd, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.57 KB | None | 0 0
  1. var fs = require("fs");
  2. var markov = require('markov');
  3.  
  4. var chain = null;
  5. var saveScheduled = false;
  6. var json;
  7. var logedin = false;
  8. var dataUpdated = false;
  9. var userList = [];
  10. var userData = {};
  11. var channelList = [];
  12.  
  13. if (!String.prototype.contains) {
  14. String.prototype.contains= function() {
  15. return String.prototype.indexOf.apply(this, arguments) !== -1;
  16. };
  17. }
  18.  
  19.  
  20.  
  21. var loginData = {
  22. username: process.env.ROCKETCHAT_USER,
  23. password: process.env.ROCKETCHAT_PASSWORD
  24. };
  25.  
  26. var apiUrl = process.env.ROCKETCHAT_URL+"/api/v1/";
  27.  
  28. if (fs.existsSync("data.json")) {
  29. json = JSON.parse(fs.readFileSync("data.json"));
  30. }else{
  31. json = {};
  32. json["userdata"] = [];
  33. }
  34.  
  35. function save(){
  36. saveScheduled = false;
  37. fs.writeFileSync("data.json", JSON.stringify(json));
  38. }
  39.  
  40. function login(robot){
  41. if(!logedin){
  42. robot.http(apiUrl+"login")
  43. .header('Content-Type', 'application/json')
  44. .post(JSON.stringify(loginData)) (function(err, res, body){
  45. userData["X-User-Id"] = JSON.parse(body).data.userId;
  46. userData["X-Auth-Token"] = JSON.parse(body).data.authToken;
  47. logedin = true;
  48. refreshChannelList(robot);
  49. });
  50. }else{
  51. refreshChannelList(robot);
  52. }
  53. }
  54.  
  55. function refreshChannelList(robot){
  56. channelList = [];
  57. userList = [];
  58. robot.http(apiUrl+"channels.list.joined")
  59. .header('Content-Type', 'application/json')
  60. .header("X-User-Id",userData["X-User-Id"])
  61. .header("X-Auth-Token", userData["X-Auth-Token"])
  62. .get() (function(err, res, body){
  63. jsonList = JSON.parse(body);
  64. for(var i=0;i<jsonList.channels.length;i++){
  65. channelList.push({id:jsonList.channels[i]._id,name:jsonList.channels[i].name,msgs:jsonList.channels[i].msgs});
  66. }
  67. robot.http(apiUrl+"users.list")
  68. .header('Content-Type', 'application/json')
  69. .header("X-User-Id",userData["X-User-Id"])
  70. .header("X-Auth-Token", userData["X-Auth-Token"])
  71. .get() (function(err, res, body){
  72. jsonList = JSON.parse(body);
  73. for(var i=0;i<jsonList.users.length;i++){
  74. userList.push({id:jsonList.users[i]._id,name:jsonList.users[i].username});
  75. }
  76. dataUpdated = true;
  77. });
  78. });
  79. }
  80.  
  81. function getUser(uid){
  82. for(var i=0;i<userList.length;i++){
  83. if(userList[i].id.toLowerCase()==uid.toLowerCase()||userList[i].name.toLowerCase()==uid.toLowerCase()){
  84. return userList[i];
  85. }
  86. }
  87. if(uid.toLowerCase()=="all"){
  88. return {id:"all",name:"all"};
  89. }
  90. return false;
  91. }
  92.  
  93.  
  94. function getChannel(uid){
  95. for(var i=0;i<channelList.length;i++){
  96. if(channelList[i].id.toLowerCase()==uid.toLowerCase()||channelList[i].name.toLowerCase()==uid.toLowerCase()){
  97. return channelList[i];
  98. }
  99. }
  100. if(uid.toLowerCase()=="all"){
  101. return {id:"all",name:"all"};
  102. }
  103. return false;
  104. }
  105.  
  106. function createChain(res){
  107. if(dataUpdated){
  108. var user = {id:"all",name:"all"};
  109. var channel = {id:"all",name:"all"};
  110. var data = "";
  111. var args = RegExp(/^(?:ParkerBot.)?\?chain(.*)/).exec(res.message.text)[1].trim().split(" ");
  112. if(args.length>0){
  113. user = getUser(args[0]);
  114. if(user==false){
  115. res.send("User not found");
  116. return;
  117. }
  118. if(args.length>1){
  119. channel = getChannel(args[1]);
  120. if(channel==false){
  121. res.send("Channel not found");
  122. return;
  123. }
  124. }
  125. }
  126. first = true;
  127. for(var i=0;i<json["userdata"].length;i++){
  128. if((user.id=="all"||user.id==json["userdata"][i].user)&&(channel.id=="all"||channel.id==json["userdata"][i].room)){
  129. data += ((first)?"":"\n")+json["userdata"][i].text;
  130. first = false;
  131. }
  132. }
  133. if(data.split("\n").length==1){
  134. res.send("Not enough data has bee collected.");
  135. return;
  136. }
  137. res.send("Creating chain with " + (data.split("\n").length) + " items.")
  138. chain = markov(1);
  139. chain.seed(data,function(){res.send("Chain is ready.")});
  140. }else{
  141. setTimeout(createChain, 600, res);
  142. }
  143. }
  144.  
  145. function readHistoryFromChannel(i, robot, rid){
  146. robot.http(apiUrl+"channels.history?roomId="+channelList[i].id+"&count="+channelList[i].msgs)
  147. .header('Content-Type', 'application/json')
  148. .header("X-User-Id",userData["X-User-Id"])
  149. .header("X-Auth-Token", userData["X-Auth-Token"])
  150. .get() (function(err, res, body){
  151. var messages = JSON.parse(body).messages;
  152. for(var j=0;j<messages.length;j++){
  153. if(messages[j].msg!=""&&!messages[j].msg.contains("`")&&!messages[j].msg.contains("http")&&messages[j].msg[0]!="?"&&messages[j].msg[0]!="="&&messages[j].msg[0]!="-"&&messages[j].u._id!="nZYJtAGT3cPpzDJsm"&&messages[j].u._id!="uFWF8vRkjcFXeck4N"&&messages[j].u._id!="GGWvxZBoZmXTSzat8"&&messages[j].u._id!="79uC5nC8vB4z5owZv"&&messages[j].u._id!="TKbZYkEDYNwEEXBEz"&&messages[j].u._id!="rocket.cat"&&messages[j].u._id!="RwaoQBpEoRxotyi8e"){
  154. json["userdata"].push({user:messages[j].u._id, room:messages[j].rid,text:messages[j].msg});
  155.  
  156. }
  157. }
  158. i++;
  159. if(i<channelList.length){
  160. readHistoryFromChannel(i, robot, rid)
  161. }else{
  162. save();
  163. robot.messageRoom(rid, json["userdata"].length + " messages loaded from the history of the channels that the bot is in.");
  164. }
  165. });
  166. }
  167. function readHistory(robot, rid){
  168. if(dataUpdated){
  169. json["userdata"] = [];
  170. readHistoryFromChannel(0, robot, rid)
  171. }else{
  172. setTimeout(readHistory, 600, robot, rid);
  173. }
  174. }
  175.  
  176.  
  177. module.exports = function (robot){
  178. robot.hear(/(.*)/i, function(res) {
  179. if(RegExp(/^(?:ParkerBot.)?\?help/).exec(res.message.text)){
  180. res.send("```ParkerBot Help!\n ?help displays this message!\n ?chain [username|all] [channel|all] loads a chain\n ?[message|number] replys to message or gives N number random messages```");
  181. }else if(CommandDataReg = RegExp(/^(?:ParkerBot.)?\?chain(.*)/).exec(res.message.text)){
  182. dataUpdated = false;
  183. login(robot);
  184. createChain(res)
  185. }else if(CommandDataReg = RegExp(/^(?:ParkerBot.)?\?reset/).exec(res.message.text)&&res.message.user.id=="6it9h5MgB26bMF5Dc"){
  186. dataUpdated = false;
  187. login(robot);
  188. res.send("Resetting.");
  189. readHistory(robot, res.message.user.roomID);
  190. }else if(CommandDataReg = RegExp(/^(?:ParkerBot.)?\?(.*)/).exec(res.message.text)){
  191. if(chain==null){
  192. res.send("You must first use ?chain to create the chain.");
  193. }else{
  194. if(CommandDataReg[1].trim().split(" ").length==1&&!isNaN(CommandDataReg[1])){
  195. var messages = parseInt(CommandDataReg[1].trim());
  196. for(var i=0;i<messages;i++){
  197. res.send(chain.fill(chain.pick(), 15).join(' '));
  198. }
  199. }else{
  200. res.send(chain.respond(CommandDataReg[1], 15).join(' '));
  201. }
  202. }
  203. }else if(res.message.user.roomType!="d"&&!res.message.text.contains("`")&&!res.message.text.contains("http")&&res.message.text[0]!="?"&&res.message.text[0]!="="&&res.message.text[0]!="-"&&res.message.user.id!="nZYJtAGT3cPpzDJsm"&&res.message.user.id!="uFWF8vRkjcFXeck4N"&&res.message.user.id!="GGWvxZBoZmXTSzat8"&&res.message.user.id!="79uC5nC8vB4z5owZv"&&res.message.user.id!="TKbZYkEDYNwEEXBEz"&&res.message.user.id!="rocket.cat"&&res.message.user.id!="RwaoQBpEoRxotyi8e"){
  204. json["userdata"].push({user:res.message.user.id, room:res.message.user.roomID, text:res.message.text});
  205. if(!saveScheduled){
  206. setTimeout(save, 60000);
  207. saveScheduled = true;
  208. }
  209. }
  210. });
  211. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement