Фичреквест, реакции на реакции, типа мне поставили кловуна, а на реакцию кловуна ставлю реакцию фейспалма и так далее. Уже три раздела с реакциями, идти так до конца!
А я уже писал что при постановке реакции было бы прикольно к ней приписку делать, типа «фейспалм - в первой же строке лога ответ на вопрос», «клоун - нагло врёт и вводит людей в заблуждение» =)
Не сомневайся, я даже делал экспериментальную правку. Там просто стоит условие на отображение, твой ли это профиль(или ты модератор). Если нет, то кидает 403. Это условие надо убрать. После этого нужно в другом файле добавить ссылку на страницу реакций(в HTML или jsp, точно не знаю).
------------------------------------------------
-- : Конфигурация :
-- : нужно указать логин и пароль
-- : или/и пароль можно получить из файла
-- : путь до файла должен быть абсолютным
-- : или относительным в каталоге скипта
------------------------------------------------
local config =
{
username = ""; -- твой логин
userpass = ""; -- твой пароль
passfile = ""; -- файл в котром лежит пароль
--------------------------------------------
ucookies = "lorcookies.txt";
usercsrf = "";
uislogin = false;
--------------------------------------------
reactions = {
get = {
["👍"] = 0;
["👎"] = 0;
["🔥"] = 0;
["😊"] = 0;
["🤔"] = 0;
["😱"] = 0;
["🤡"] = 0;
["🤦"] = 0;
["🪗"] = 0;
["☕☕"] = 0;
};
set = {
["👍"] = 0;
["👎"] = 0;
["🔥"] = 0;
["😊"] = 0;
["🤔"] = 0;
["😱"] = 0;
["🤡"] = 0;
["🤦"] = 0;
["🪗"] = 0;
["☕☕"] = 0;
};
};
reactions_total = { get = 0, set = 0 };
--------------------------------------
const =
{
-- lorsource: ------------------
-- RegisterRequestValidator.java
--------------------------------
MIN_PASSWORD_LEN = 4;
};
};
---------------------------------------------------
-- : Получение пароля (проверка переменной и файла)
---------------------------------------------------
local function get_pass()
if (#config.userpass < config.const.MIN_PASSWORD_LEN)
then
---------------------------------------------
if (config.passfile == "")
then
print("---------------------------------");
print("Переменная с паролем не задана");
print("Файл с паролем не задан ---------");
print("---------------------------------");
os.exit();
end
----------------------------------------------
local passfile = io.open(config.passfile,'r');
if (not passfile)
then
print("---------------------------------");
print("Проверь путь/имя файла с паролем");
print("---------------------------------");
os.exit();
end
----------------------------------------------
config.userpass = passfile:read('*l');
passfile:close();
if(#config.userpass < config.const.MIN_PASSWORD_LEN)
then
print("---------------------------------");
print("Пароль слишком короткий, идинафиг");
print("---------------------------------");
os.exit();
end
----------------------------------------------
end
end
--------------------------------------------------------------
-- : Получение временного токена (для возможности регистрации)
--------------------------------------------------------------
local function get_csrf()
local header =
io.popen('curl -s "https://www.linux.org.ru/" --head');
config.usercsrf =
header:read('*a'):match('CSRF_TOKEN=(........................);');
end
---------------------------------------------------------------
-- : Регистрация для получения cookies (запрос к личным данным)
---------------------------------------------------------------
local function lor_login()
get_csrf();
get_pass();
------------------------------------------------------------
local authorization =
io.popen('curl -s "https://www.linux.org.ru/ajax_login_process"'..
' --header "Cookie:CSRF_TOKEN='..config.usercsrf..';" -XPOST '..
' -d "nick=' ..config.username..'"'..
' -d "passwd='..config.userpass..'"'..
' -d "csrf=' ..config.usercsrf..'"'..
' -c ' ..config.ucookies);
------------------------------------------------------------
local server_ansver = authorization:read('*a');
authorization:close();
------------------------------------------------------------
if (server_ansver:find('true',1,true))
then
config.uislogin = true;
else
print("---------------------------------");
print("Сервер ответил -> "..server_ansver);
print("---------------------------------");
print("Вроде неправильный логин / пароль");
print("Если виден HTML попробуй ещё раз ");
print("запутить скрипт ничего не меняя ");
print("---------------------------------");
os.exit();
end
------------------------------------------------------------
end
local function lor_reations_info(react_type)
local offset = 0;
local cookey = '" -b ';
local offset_ = '?offset=';
local command = 'curl -s ';
local set_pfx = '/reactions';
local get_pfx = '/reactions/to';
local postfix = "---";
local siteurl = '"https://www.linux.org.ru/people/';
----------------------------------------------------
if (react_type == 'set') then postfix = set_pfx; end
if (react_type == 'get') then postfix = get_pfx; end
if (react_type == '---') then error('🤡🤡🤡🤡'); end
----------------------------------------------------
if (config.uislogin == false)
then
lor_login();
end
io.stdout:setvbuf('no');
----------------------------------------------------
while (true)
do
local reactions = '';
------------------------------------------------
reactions = io.popen(command..
siteurl..config.username..
postfix..offset_..offset..
cookey..config.ucookies);
-------------------------------------------------
local text = reactions:read('*a');
reactions:close();
-------------------------------------------------
for react in text:gmatch("[^\n]+")
do
for n,v in pairs(config.reactions[react_type])
do
if (react:find(n,1,true))
then
config.reactions[react_type][n] =
config.reactions[react_type][n] + 1;
offset=offset+1;
if (n == "☕☕") then n = "☕" end
io.write("\rСканирование кловунов и не только "
..n..' №'..offset..'\r');
break;
end
end
end
-----------------------------------------------
if (not text:find('следующие',1,true))
then
config.reactions_total[react_type] = offset;
break;
end
-----------------------------------------------
end
end
lor_reations_info('set');
print("----------------------------------------------")
print(' Пользователь '..config.username..' понаставил')
print("----------------------------------------------")
for name,val in pairs(config.reactions.set) do
print(name..' -> '..val);
end
print(">>> Всего оставлено "..config.reactions_total.set.." реакций");
lor_reations_info('get');
print("-----------------------------------------------")
print(' Пользователь '..config.username..' понаполучал')
print("-----------------------------------------------")
for name,val in pairs(config.reactions.get) do
print(name..' -> '..val);
end
print(">>> Всего получено "..config.reactions_total.get.." реакций");
print("-----------------------------------------------")
Неточности вызваны наличием шмайликов в самих сообщениях, но дополнительная проверка грозит,
тем что при изменении вёрстки всё опять сломается. Пяток лишне подсчитанных реакций не критичны на фоне сотен.
Такое сообщение выскакивает и если в момент проставления реакции сеть недоступна.
Да, 99.9%, что был именно этот случай. В момент появления надписи «Возможно, что превышен лимит реакций. Попробуйте снова через 10 минут» как раз был плохой мобильный интернет;
maxcom ситуация прояснилась.
local separ = ' | ';
local total = config.reactions_total;
io.write("| Реакция | Получил (Всего "..total.get..") ");
io.write("| Поставил (Всего "..total.set..")|\n");
print("|:-------:|:-------:|:--------:|");
for react,get in pairs(config.reactions.get)
do
local set = config.reactions.set[react];
print(separ..react..separ..get..separ..set..separ);
end
Реакция
Получил (Всего 1021)
Поставил (Всего 1878)
🤔
34
156
😊
420
1382
👍
410
740
🤡
268
296
🪗
8
14
☕☕
540
204
🤦
56
54
👎
18
72
🔥
226
198
😱
62
640
Но мне категорически не нравится как выглядят таблицы на ЛОРе. Они размашистые, столбцы не выделяются, по краям рамки нету. Заголовок цветом не выделен. Ещё был вариант горизинтальной таблички типа что внизу, более компактно, но тоже такое себе. Короче мне нинраица :3 А как сделать их лучше не знаю, типа сжать ячейки до ширины размера самого длинного элемента, а затем саму таблицу отцентрировать на странице целиком так как с боку от неё всё равно писать нельзя.
maxcom, alex0x08, не знаю, ошибка или фича, но нашел вот такое. На странице «Реакции на мои сообщения» отображается реакция на сообщение которое было удалено модератором. Соответственно, ссылка битая и ведет на страницу «Сообщение удалено или не существует». Должны ли удаляться соответствующие реакции с удалением сообщения?