King Kongregate

Adds a number of commands to Kongregate chat

目前為 2015-05-17 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name King Kongregate
  3. // @namespace http://alphaoverall.com
  4. // @version 0.7
  5. // @description Adds a number of commands to Kongregate chat
  6. // @author AlphaOverall
  7. // @match http://www.kongregate.com/games/*/*
  8. // ==/UserScript==
  9.  
  10. //==========
  11. // King Kongregate
  12. // http://alphaoverall.com
  13. // by AlphaOverall (http://www.kongregate.com/accounts/AlphaOverall)
  14. // Inspired by Kongregate Get (http://userscripts-mirror.org/scripts/review/56432)
  15. //==========
  16.  
  17. var dom = (typeof unsafeWindow === "undefined"?window:unsafeWindow);
  18.  
  19. function init_kingKongregate(){
  20. function makeLink(user){
  21. return '<a href="#" onclick="holodeck.showMiniProfile(\'' + user + '\'); return false;">' + user + '</a>';
  22. }
  23. var holodeck = dom.holodeck;
  24. ChatDialogue = dom.ChatDialogue;
  25. //
  26. //From original Kongregate Get script (http://userscripts-mirror.org/scripts/review/56432)
  27. //
  28. holodeck.addChatCommand("avg", function(l,n){
  29. var roomDetails = l.chatWindow().activeRoom();
  30. var allUsers = roomDetails.users();
  31. var allLevels = 0;
  32. for(var i=0; i < allUsers.length; i++){
  33. allLevels += allUsers[i]._level;
  34. }
  35. var avgLevel = Math.round(allLevels/allUsers.length*10)/10;
  36. l.activeDialogue().displayUnsanitizedMessage("Average Level in Room", avgLevel , {"class":"whisper received_whisper"}, {non_user: true});
  37. return false;
  38. });
  39. if(holodeck && ChatDialogue && !holodeck._chat_commands.mostplayed) {
  40. //Credit goes entirely to Ventero for this command. Thanks for fixing the command after the Kongregate update, Vent :)
  41. holodeck.addChatCommand("mostplayed", function(l,n){
  42. var matchArr = n.match(/\/\S+\s+(\d+)/),
  43. dialog = l.activeDialogue(),
  44. gamesCount = 5,
  45. userList = dom.$A(l.chatWindow().activeRoom().users()),
  46. usersCount = userList.length;
  47. if(matchArr && matchArr[1]) gamesCount = matchArr[1];
  48. function p(count){
  49. return count == 1?"":"s";
  50. }
  51. var games = dom.$H();
  52. userList.each(function(user){
  53. console.log(user);
  54. var o = user._game_url;
  55. if(!games.get(o)){
  56. games.set(o, {
  57. title: user._game_title,
  58. count: 0,
  59. user: "",
  60. url: o
  61. });
  62. }
  63. games.get(o).count++;
  64. games.get(o).user = user.username;
  65. });
  66.  
  67. var countArr = games.values().sort(function(a,b){
  68. return +b.count - +a.count;
  69. }).slice(0, gamesCount);
  70. var totalCount = games.size();
  71.  
  72. dialog.displayUnsanitizedMessage("Kong Bot", usersCount+" user"+p(usersCount)+" playing "+totalCount+" different game" + p(totalCount), {"class":"whisper received_whisper"}, {non_user: true});
  73. dialog.displayUnsanitizedMessage("Kong Bot", gamesCount + " most played game" + p(gamesCount) + ":", {"class":"whisper received_whisper"}, {non_user: true});
  74. countArr.each(function(obj){
  75. dialog.displayUnsanitizedMessage("Kong Bot",
  76. obj.count + " user" + p(obj.count) + " (" +
  77. (obj.count > 1 ? "" : makeLink(obj.user) + ", ") +
  78. (100*obj.count/usersCount).toFixed(1) + "%) " +
  79. (obj.count > 1 ? "are" : "is") + ' playing <a href="' +
  80. obj.url + '">' + obj.title + "</a>", {"class":"whisper received_whisper"}, {non_user: true});
  81. });
  82. return false;
  83. });
  84. holodeck._chat_commands.mp = holodeck._chat_commands.getmp = holodeck._chat_commands.mostplayed;
  85. }
  86. //
  87. //Rest by AlphaOverall
  88. //
  89. holodeck.addChatCommand("highlvl", function(l,n){
  90. var roomDetails = l.chatWindow().activeRoom();
  91. var allUsers = roomDetails.users();
  92. var highLevels = "";
  93. var highestLevel = 0;
  94. var count = 0;
  95. for(var i=0; i < allUsers.length; i++){
  96. if (allUsers[i]._level > highestLevel){
  97. highestLevel = allUsers[i]._level;
  98. highLevels = "<img src=\"" + allUsers[i]._chat_avatar_url + "\">" + makeLink(allUsers[i].username);
  99. count = 1;
  100. }
  101. else if (allUsers[i]._level == highestLevel){
  102. highLevels = highLevels + ", <img src=\"" + allUsers[i]._chat_avatar_url + "\">" + makeLink(allUsers[i].username);
  103. count+=1;
  104. }
  105. }
  106. l.activeDialogue().displayUnsanitizedMessage("Highest Level in Room", highestLevel + ", Usercount: " + count + ", Users: " + highLevels, {"class":"whisper received_whisper"}, {non_user: true});
  107. return false;
  108. });
  109.  
  110. holodeck.addChatCommand("lowlvl", function(l,n){
  111. var roomDetails = l.chatWindow().activeRoom();
  112. var allUsers = roomDetails.users();
  113. var lowLevels = "";
  114. var lowestLevel = Infinity; //Just to makes sure :P
  115. var count = 0;
  116. for(var i=0; i < allUsers.length; i++){
  117. if (allUsers[i]._level < lowestLevel){
  118. lowestLevel = allUsers[i]._level;
  119. lowLevels = "<img src=\"" + allUsers[i]._chat_avatar_url + "\">" + makeLink(allUsers[i].username);
  120. count = 1;
  121. }
  122. else if (allUsers[i]._level == lowestLevel){
  123. count+=1;
  124. lowLevels = lowLevels + ", <img src=\"" + allUsers[i]._chat_avatar_url + "\">" + makeLink(allUsers[i].username);
  125. }
  126. }
  127. l.activeDialogue().displayUnsanitizedMessage("Lowest Level in Room", lowestLevel + ", Usercount: " + count + ", Users: " + lowLevels, {"class":"whisper received_whisper"}, {non_user: true});
  128. return false;
  129. });
  130.  
  131. holodeck.addChatCommand("levels", function(l,n){
  132. var z = n.match(/^\/\S+\s+(.+)/);
  133. var roomDetails = l.chatWindow().activeRoom();
  134. var allUsers = roomDetails.users();
  135. if (z){
  136. var userLevels = "";
  137. var levelToFind = z[1];
  138. var count = 0;
  139. for(var i=0; i < allUsers.length; i++){
  140. if (allUsers[i]._level == levelToFind && userLevels == ""){
  141. userLevels = "<img src=\"" + allUsers[i]._chat_avatar_url + "\">" + makeLink(allUsers[i].username);
  142. count = 1;
  143. }
  144. else if (allUsers[i]._level == levelToFind){
  145. count+=1;
  146. userLevels = userLevels + ", <img src=\"" + allUsers[i]._chat_avatar_url + "\">" + makeLink(allUsers[i].username);
  147. }
  148. }
  149. l.activeDialogue().displayUnsanitizedMessage("Level " + levelToFind, "Usercount: " + count + ", Users: " + userLevels, {"class":"whisper received_whisper"}, {non_user: true});
  150. return false;
  151. }
  152. else{
  153. var levelsList = [l._active_user._attributes._object.level];
  154. for(var j=0; j < allUsers.length; j++){
  155. for (var k=0; k <= allUsers[j]._level; k++){
  156. if (allUsers[j]._level == k){
  157. if (levelsList.indexOf(k) < 0){
  158. levelsList.push(k);
  159. }
  160. }
  161. }
  162. }
  163. levelsList.sort(function(a, b){return a-b});
  164. l.activeDialogue().displayUnsanitizedMessage("Levels", levelsList.join(", "), {"class":"whisper received_whisper"}, {non_user: true});
  165. return false;
  166. }
  167. });
  168. holodeck.addChatCommand("developer", function(l,n){
  169. var roomDetails = l.chatWindow().activeRoom();
  170. var allUsers = roomDetails.users();
  171. var devs = [];
  172. for(var i=0; i < allUsers.length; i++){
  173. if (allUsers[i]._developer){
  174. devs.push(allUsers[i].username);
  175. }
  176. }
  177. l.activeDialogue().displayUnsanitizedMessage("Developers in room", devs.join(", "), {"class":"whisper received_whisper"}, {non_user: true});
  178. return false;
  179. });
  180.  
  181. holodeck.addChatCommand("admin", function(l,n){
  182. var roomDetails = l.chatWindow().activeRoom();
  183. var allUsers = roomDetails.users();
  184. var admins = [];
  185. for(var i=0; i < allUsers.length; i++){
  186. if (allUsers[i]._admin){
  187. admins.push(allUsers[i].username);
  188. }
  189. }
  190. l.activeDialogue().displayUnsanitizedMessage("Admins in room", admins.join(", "), {"class":"whisper received_whisper"}, {non_user: true});
  191. return false;
  192. });
  193. holodeck.addChatCommand("moderator", function(l,n){
  194. var roomDetails = l.chatWindow().activeRoom();
  195. var allUsers = roomDetails.users();
  196. var mods = [];
  197. for(var i=0; i < allUsers.length; i++){
  198. if (allUsers[i]._moderator_room_ids.length > 0 || allUsers[i]._moderator_game_ids.length > 0){
  199. mods.push(allUsers[i].username);
  200. }
  201. }
  202. l.activeDialogue().displayUnsanitizedMessage("Mods in room", mods.join(", "), {"class":"whisper received_whisper"}, {non_user: true});
  203. return false;
  204. });
  205. //Simple commands that will show up in user info also
  206. holodeck.addChatCommand("id", function(l,n){
  207. var user = l._active_user._attributes._object;
  208. l.activeDialogue().displayUnsanitizedMessage("ID", user.id, {"class":"whisper received_whisper"}, {non_user: true});
  209. return false;
  210. });
  211. holodeck.addChatCommand("username", function(l,n){
  212. var user = l._active_user._attributes._object;
  213. l.activeDialogue().displayUnsanitizedMessage("Username", makeLink(user.username), {"class":"whisper received_whisper"}, {non_user: true});
  214. return false;
  215. });
  216. holodeck.addChatCommand("kreds", function(l,n){
  217. var user = l._active_user._attributes._object;
  218. l.activeDialogue().displayUnsanitizedMessage("Kreds", user.kreds_balance, {"class":"whisper received_whisper"}, {non_user: true});
  219. return false;
  220. });
  221. holodeck.addChatCommand("level", function(l,n){
  222. var user = l._active_user._attributes._object;
  223. l.activeDialogue().displayUnsanitizedMessage("Level", user.level, {"class":"whisper received_whisper"}, {non_user: true});
  224. return false;
  225. });
  226. holodeck.addChatCommand("age", function(l,n){
  227. var user = l._active_user._attributes._object;
  228. l.activeDialogue().displayUnsanitizedMessage("Age", user.age, {"class":"whisper received_whisper"}, {non_user: true});
  229. return false;
  230. });
  231. holodeck.addChatCommand("email", function(l,n){
  232. var user = l._active_user._attributes._object;
  233. l.activeDialogue().displayUnsanitizedMessage("Name/Email", user.sender_name_or_email, {"class":"whisper received_whisper"}, {non_user: true});
  234. return false;
  235. });
  236. holodeck.addChatCommand("user", function(l,n){
  237. var z = n.match(/^\/\S+\s+(.+)/);
  238. if (z){
  239. var roomDetails = l.chatWindow().activeRoom();
  240. var allUsers = roomDetails.users();
  241. for(var i=0; i < allUsers.length; i++){
  242. if (i == allUsers.length-1 && allUsers[i].username != z[1]){
  243. l.activeDialogue().displayUnsanitizedMessage("Kong Bot", "User not in chat... Opening mini profile", {"class":"whisper received_whisper"}, {non_user: true});
  244. holodeck.showMiniProfile(z[1]);
  245. return false;
  246. }
  247. if (allUsers[i].username == z[1]){
  248. var user = allUsers[i];
  249. l.activeDialogue().displayUnsanitizedMessage("Username", "<img src=\""+user._chat_avatar_url+"\"></img>" + makeLink(user.username), {"class":"whisper received_whisper"}, {non_user: true});
  250. l.activeDialogue().displayUnsanitizedMessage("Level", user._level, {"class":"whisper received_whisper"}, {non_user: true});
  251. if (user._moderator_room_ids.length == 0 && user._moderator_game_ids.length == 0){
  252. l.activeDialogue().displayUnsanitizedMessage("Admin/Moderator/Developer/Premium",user._admin+"/false/"+user._developer+"/"+user._premium, {"class":"whisper received_whisper"}, {non_user: true});
  253. }
  254. else{
  255. l.activeDialogue().displayUnsanitizedMessage("Admin/Moderator/Developer/Premium",user._admin+"/true/"+user._developer+"/"+user._premium, {"class":"whisper received_whisper"}, {non_user: true});
  256. if (!user._admin) {
  257. l.activeDialogue().displayUnsanitizedMessage("Moderator Game Ids", user._moderator_game_ids.join(", "), {"class":"whisper received_whisper"}, {non_user: true});
  258. l.activeDialogue().displayUnsanitizedMessage("Moderator Room Ids", user._moderator_room_ids.join(", "), {"class":"whisper received_whisper"}, {non_user: true});
  259. }
  260. }
  261. l.activeDialogue().displayUnsanitizedMessage("Playing", "<a href=\"http://www.kongregate.com" + user._game_url + "\" target=\"_blank\">" + user._game_title + "</a>", {"class":"whisper received_whisper"}, {non_user: true});
  262. l.activeDialogue().displayUnsanitizedMessage("Presence", user._presence, {"class":"whisper received_whisper"}, {non_user: true});
  263. l.activeDialogue().displayUnsanitizedMessage("Role", user._role, {"class":"whisper received_whisper"}, {non_user: true});
  264. return false;
  265. }
  266. }
  267. }
  268. else {
  269. var user = l._active_user._attributes._object;
  270. l.activeDialogue().displayUnsanitizedMessage("Username", "<img src=\""+user.avatar_url+"\">" + makeLink(user.username), {"class":"whisper received_whisper"}, {non_user: true});
  271. l.activeDialogue().displayUnsanitizedMessage("Age", user.age, {"class":"whisper received_whisper"}, {non_user: true});
  272. l.activeDialogue().displayUnsanitizedMessage("Admin/Moderator/Developer/Premium",user.admin+"/"+user.moderator+"/"+user.developer+"/"+user.premium, {"class":"whisper received_whisper"}, {non_user: true});
  273. l.activeDialogue().displayUnsanitizedMessage("ID", user.id, {"class":"whisper received_whisper"}, {non_user: true});
  274. l.activeDialogue().displayUnsanitizedMessage("Level", user.level, {"class":"whisper received_whisper"}, {non_user: true});
  275. l.activeDialogue().displayUnsanitizedMessage("Points for Next Level", user.points_away, {"class":"whisper received_whisper"}, {non_user: true});
  276. l.activeDialogue().displayUnsanitizedMessage("Total Points", user.points, {"class":"whisper received_whisper"}, {non_user: true});
  277. l.activeDialogue().displayUnsanitizedMessage("Last Level Up", user.last_levelup_at, {"class":"whisper received_whisper"}, {non_user: true});
  278. l.activeDialogue().displayUnsanitizedMessage("Kreds", user.kreds_balance, {"class":"whisper received_whisper"}, {non_user: true});
  279. l.activeDialogue().displayUnsanitizedMessage("Gameplays", user.gameplays_count, {"class":"whisper received_whisper"}, {non_user: true});
  280. l.activeDialogue().displayUnsanitizedMessage("Game Ratings", user.ratings_count, {"class":"whisper received_whisper"}, {non_user: true});
  281. l.activeDialogue().displayUnsanitizedMessage("BOTD Earned This Week", user.botds_this_week, {"class":"whisper received_whisper"}, {non_user: true});
  282. l.activeDialogue().displayUnsanitizedMessage("Name/Email", user.sender_name_or_email, {"class":"whisper received_whisper"}, {non_user: true});
  283. return false;
  284. }
  285. });
  286.  
  287. holodeck.addChatCommand("available", function(l,n){
  288. var z = n.match(/^\/\S+\s+(.+)/);
  289. if (z){
  290. l.activeDialogue().displayUnsanitizedMessage("Kong Bot", "Availability of " + z[1] + ":<iframe src=\"httP://www.kongregate.com/accounts/availability?username=" + z[1] + "\" width=\"100%\" height=\"30\"></iframe>", {"class":"whisper received_whisper"}, {non_user: true});
  291. }
  292. return false;
  293. });
  294. holodeck.addChatCommand("info", function(l,n){
  295. var info = l._chat_window._active_room;
  296. var room = info._room;
  297. l.activeDialogue().displayUnsanitizedMessage("Room Name", room.name, {"class":"whisper received_whisper"}, {non_user: true});
  298. l.activeDialogue().displayUnsanitizedMessage("Room ID", room.id, {"class":"whisper received_whisper"}, {non_user: true});
  299. l.activeDialogue().displayUnsanitizedMessage("Room Owner", "<a href=\"http://www.kongregate.com/accounts/" + room.owner + "\" target=\"_blank\">" + room.owner + "</a>", {"class":"whisper received_whisper"}, {non_user: true});
  300. l.activeDialogue().displayUnsanitizedMessage("Room Type", room.type, {"class":"whisper received_whisper"}, {non_user: true});
  301. l.activeDialogue().displayUnsanitizedMessage("Favorite Room", info._favorite_room, {"class":"whisper received_whisper"}, {non_user: true});
  302. l.activeDialogue().displayUnsanitizedMessage("Users In Room", info._number_in_room_node.innerText, {"class":"whisper received_whisper"}, {non_user: true});
  303. l.activeDialogue().displayUnsanitizedMessage("Guests In Room", info._guests_in_room_node.innerText, {"class":"whisper received_whisper"}, {non_user: true});
  304. return false;
  305. });
  306.  
  307. holodeck.addChatCommand("botd", function(l,n){
  308. var kbotd = l._active_user._attributes._object;
  309. var typeOf = "(easy)";
  310. if (kbotd.botd_reward_points == 5){//Do nothing
  311. }
  312. else if (kbotd.botd_reward_points == 15) {typeOf = "(medium)";}
  313. else if (kbotd.botd_reward_points == 30){typeOf = "(hard)";}
  314. else if (kbotd.botd_reward_points == 60){typeOf = "(impossible)";}
  315. else {typeOf = "Points: " + kbotd.botd_reward_points;} //Just in case
  316. l.activeDialogue().displayUnsanitizedMessage("BOTD", "<img src=\""+kbotd.botd_icon_uri+"\"></img>" + "<a href=\"" + kbotd.botd_game_uri + "\" target=\"_blank\">" + kbotd.botd_game_name + " - " + kbotd.botd_description + "</a> " + typeOf, {"class":"whisper received_whisper"}, {non_user: true});
  317. return false;
  318. });
  319.  
  320. holodeck.addChatCommand("friends", function(l,n){
  321. var kongfriends = l._chat_window._friends;
  322. var final = [];
  323. for(var friend in kongfriends){
  324. final.push("<a href=\"http://www.kongregate.com/accounts/" + friend + "\" target=\"_blank\">" + friend + "</a>");
  325. }
  326. l.activeDialogue().displayUnsanitizedMessage("Friends", final.join(", "), {"class":"whisper received_whisper"}, {non_user: true});
  327. return false;
  328. });
  329.  
  330. holodeck.addChatCommand("online", function(l,n){
  331. var online = document.getElementsByClassName("chat_actions_list")[0].childNodes[5];
  332. online.click();
  333. return false;
  334. });
  335.  
  336. holodeck.addChatCommand("exit", function(l,n){
  337. close();
  338. return false;
  339. });
  340.  
  341. holodeck.addChatCommand("open", function(l,n){
  342. var z = n.match(/^\/\S+\s+(.+)/);
  343. if (z[1]) {
  344. m = z[1].split(" ");
  345. if (m[0] == "accounts"){
  346. if (m[1]){
  347. open("http://www.kongregate.com/accounts/" + m[1], "_blank");
  348. }
  349. else{
  350. open("http://www.kongregate.com/accounts/" + l._active_user._attributes._object.username);
  351. }
  352. }
  353. else if (m[0] == "games"){
  354. if (m[1]) {
  355. if (m[2]){
  356. open("http://www.kongregate.com/games/" + m[1] + "/" + m[2], "_blank");
  357. }
  358. else{
  359. l.activeDialogue().displayUnsanitizedMessage("Kong Bot", "No specified game", {"class":"whisper received_whisper"}, {non_user: true});
  360. }
  361. }
  362. else{
  363. l.activeDialogue().displayUnsanitizedMessage("Kong Bot", "No specified game creator", {"class":"whisper received_whisper"}, {non_user: true});
  364. }
  365. }
  366. else {
  367. open("http://www.kongregate.com/search?q=" + z[1], "_blank");
  368. }
  369. }
  370. else {
  371. open("http://www.kongregate.com/accounts/" + l._active_user._attributes._object.username);
  372. }
  373. return false;
  374. });
  375.  
  376. holodeck.addChatCommand("khelp", function(l,n){
  377. open("http://www.kongregate.com/pages/help", "_blank");
  378. return false;
  379. });
  380. holodeck.addChatCommand("kong", function(l,n){
  381. open("http://www.kongregate.com", "_blank");
  382. return false;
  383. });
  384. holodeck.addChatCommand("help", function(l,n){
  385. open("http://www.alphaoverall.com", "_blank");
  386. return false;
  387. });
  388. holodeck.addChatCommand("signup", function(l,n){
  389. lightbox.prototype.initializeKongregateLightboxFromAjax('/accounts/new/behind_login?game_id=' + active_user.gameId(), { afterStaticContentLoad:lightbox.prototype.toggleRegistration });
  390. return false;
  391. });
  392. holodeck.addChatCommand("signout", function(l,n){
  393. signoutFromSite();
  394. return false;
  395. });
  396. holodeck._chat_commands.lvl = holodeck._chat_commands.level;
  397. holodeck._chat_commands.konghelp = holodeck._chat_commands.kongregatehelp = holodeck._chat_commands.khelp;
  398. holodeck._chat_commands.kongregate = holodeck._chat_commands.kong;
  399. holodeck._chat_commands.avglvl = holodeck._chat_commands.alvl = holodeck._chat_commands.avg;
  400. holodeck._chat_commands.close = holodeck._chat_commands.exit;
  401. holodeck._chat_commands.roominfo = holodeck._chat_commands.info;
  402. holodeck._chat_commands.friendsonline = holodeck._chat_commands.online;
  403. holodeck._chat_commands.u = holodeck._chat_commands.me = holodeck._chat_commands.user;
  404. holodeck._chat_commands.admins = holodeck._chat_commands.administrator = holodeck._chat_commands.administrators = holodeck._chat_commands.admin;
  405. holodeck._chat_commands.dev = holodeck._chat_commands.devs = holodeck._chat_commands.developers = holodeck._chat_commands.developer;
  406. holodeck._chat_commands.mod = holodeck._chat_commands.mods = holodeck._chat_commands.moderators = holodeck._chat_commands.moderator;
  407. holodeck._chat_commands.hlvl = holodeck._chat_commands.highlevel = holodeck._chat_commands.hlevel = holodeck._chat_commands.highlvl;
  408. holodeck._chat_commands.llvl = holodeck._chat_commands.lowlevel = holodeck._chat_commands.llevel = holodeck._chat_commands.lowlvl;
  409. holodeck._chat_commands.mp = holodeck._chat_commands.getmp = holodeck._chat_commands.mostplayed;
  410. }
  411.  
  412. function check(){
  413. var injectScript = dom.injectScript||(document.getElementById("injectScriptDiv")?document.getElementById("injectScriptDiv").onclick():0);
  414. if(injectScript){
  415. injectScript(init_kingKongregate, 0);
  416. }
  417. else if(!dom._promptedFramework && !/Chrome/i.test(navigator.appVersion)){
  418. if(confirm("You don't have the latest version of the framework-script!\n" +
  419. "Please install it, otherwise the King Kongregate script won't work.\n" +
  420. "Clicking ok will open a new tab where you can install the script"))
  421. window.open("http://userscripts-mirror.org/scripts/show/54245", "_blank");
  422. dom._promptedFramework = true;
  423. }
  424. }
  425.  
  426. setTimeout(check, 0);