Browse code

User lookup and tags

Dmitrii Kashin authored on 22/11/2016 16:52:28
Showing 2 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,2 @@
0
+*~
1
+.*
0 2
new file mode 100644
... ...
@@ -0,0 +1,158 @@
0
+// ==UserScript==
1
+// @name        OpenNet Mod Tools
2
+// @namespace   opennet-mod-tools
3
+// @description Extend interface functionality for OpenNet moderators
4
+// @include     https://www.opennet.ru/openforum/vsluhforumID3/*
5
+// @version     0.2
6
+// @grant       none
7
+// ==/UserScript==
8
+
9
+/* Данный userscript создан для облегчения задачи модерирования проекта opennet
10
+ * Я не вебник, так что нахакал как сумел
11
+ * Функциональность состоит из двух частей:
12
+ * 1) Расстановки тегов
13
+ * 2) Отслеживанием сообщений по ip
14
+ *
15
+ * Теги расставляются при помощи праввки исходного кода скрипта, пример показан ниже.
16
+ * Отслеживание по ip производится при нажатии на кнопку (((>o<))), которая есть у каждого сообщения.
17
+ * При этом сообщения в новости, сделанные с одного ip-адреса окрашиваются в розовый цвет.
18
+ * Также при отслеживании полезно открыть js-консоль (Shift+Ctrl+J):
19
+ * При отслеживании туда выводится информация об количестве сообщений пользователя и ссылки на все найденные его сообщения.
20
+ *
21
+ * Надо иметь в виду, что реально помеченных сообщений может быть меньше найденных.
22
+ * Это связано с тем, что какие-то сообщения могут быть либо удалены, либо одно из них
23
+ * собственно сама новость и есть.
24
+ * 
25
+ * Также, поскольку отслеживание ведётся путём грепанья лога, в темах недельной давности отслеживание работать не будет.
26
+*/
27
+
28
+
29
+// определение news_id:
30
+// работает для ссылок типа 
31
+// https://www.opennet.ru/openforum/vsluhforumID3/109668.html
32
+
33
+function last (lst) {
34
+  return lst[lst.length-1]
35
+}
36
+
37
+var news_id = last(document.location.href.split("/")).match(/\d+/)[0];
38
+
39
+var utags = {};
40
+
41
+// теги
42
+let mod = "mod" // модераторы
43
+let smart = "smart" // стоит прислушаться
44
+let fat = "дебил" // толстые тролли
45
+let troll = "troll" // тонкие тролли
46
+let mssp = "mssp" // страх и ненависть Шигорина
47
+
48
+// люди
49
+utags["freehck"] = [mod]
50
+utags["Michael Shigorin"] = [mod]
51
+utags["Сергей"] = [fat]
52
+utags["Celcion"] = [smart]
53
+utags["Crazy Alex"] = [smart]
54
+utags["Andrey Mitrofanov"] = [smart]
55
+
56
+// расстановка тэгов
57
+var links = document.getElementsByTagName("a");
58
+for (i in links) {
59
+  name = links[i].text;
60
+  if (name in utags) {
61
+      links[i].parentElement.innerHTML = "<a href=\"" + links[i].href + "\">" + links[i].text + "</a> " +
62
+                                         "[" + utags[name].toString() + "]"
63
+   };
64
+};
65
+
66
+// раскраска сообщений
67
+
68
+function li_msg_id (id) {
69
+  return ("t" + id)
70
+}
71
+
72
+function mark_li (id, color) {
73
+  let elem = document.getElementById(li_msg_id(id));
74
+  if (elem != null)
75
+    elem.style.backgroundColor = color
76
+}
77
+
78
+// раскраска сообщений
79
+
80
+function msg_id (id) {
81
+  return ("m" + id)
82
+}
83
+
84
+function mark_msg (id, color) {
85
+  let elem = document.getElementById(msg_id(id));
86
+  if (elem != null) { // если сообщение удалено модератором
87
+    var tbl = elem.parentElement;
88
+    tbl.getElementsByTagName("blockquote")[0].style.backgroundColor = color;
89
+  }
90
+}
91
+
92
+function mark (id, color) {
93
+  mark_msg(id, color);
94
+  mark_li(id, color);
95
+}
96
+
97
+var MARKED_IDS = [];
98
+
99
+function mark_all (ids, color) {
100
+  for (var i=0; i<ids.length; i++) {if (ids[i] != 0) mark(ids[i], color)} // сравнение исключает саму новость
101
+}
102
+
103
+function unmark_all () {
104
+  for (var i=0; i<MARKED_IDS.length; i++) {if (MARKED_IDS[i] != 0) mark(MARKED_IDS[i], "#DDE1C2")}
105
+}
106
+
107
+function num_of_str (s) {
108
+  return (s.match(/\d+/)[0])
109
+}
110
+
111
+function lookup_url (news_id, id) {
112
+    return ("https://www.opennet.ru/cgi-bin/openforum/a/show_ip.cgi?forum=vsluhforumID3&om="+news_id+"&omm="+id)
113
+  }
114
+
115
+function get_content () {
116
+    alert( this.responseText );
117
+  }
118
+
119
+function get_content_and_hl () {
120
+    let content = this.responseXML;
121
+    let links = content.getElementsByTagName("a");
122
+    console.log("---------------------")
123
+    var hl_ids = [];
124
+    for (var i=0; i<links.length; i++) {
125
+      console.log(links[i].href);
126
+      var [some_news_id, msg_id] = last(links[i].href.split("/")).match(/\d+/g);
127
+      if (some_news_id == news_id) {
128
+        hl_ids.push(msg_id);
129
+      }
130
+    }
131
+    console.log("Total messages found: "+links.length);
132
+    console.log("Messages in this news: "+hl_ids.length);
133
+    unmark_all();
134
+    mark_all(hl_ids, "pink");
135
+    MARKED_IDS = hl_ids;
136
+  }
137
+  
138
+function lookup_msg_id (news_id, id) {
139
+    var req = new XMLHttpRequest();
140
+    req.addEventListener("load", get_content_and_hl);
141
+    req.open("GET", (lookup_url(news_id, id)));
142
+    req.withCredentials = true;
143
+    req.responseType = "document";
144
+    req.send()
145
+  }
146
+
147
+var msgs = document.querySelectorAll('[id^=m]');
148
+for (var i=0; i<msgs.length; i++) {
149
+  let message = msgs[i];
150
+  let id = num_of_str(msgs[i].id);
151
+  let lookup = message.getElementsByTagName("a")[0].parentElement
152
+  .appendChild(document.createTextNode(" ")).parentElement
153
+  .appendChild(document.createElement("b"))
154
+  .appendChild(document.createElement("a"));
155
+  lookup.onclick = function () {lookup_msg_id(news_id, id)};
156
+  lookup.text = "(((>o<)))";
157
+}