Итак, продолжаем. В прошлый раз я расписал планы и задачи, мы пока застряли на первой же подзадаче. Сегодня мне хочется дойти до первых результатов, чтобы иметь возможность запустить скрипт и получить результат.
Еше раз подзадачи:
- Необходимо получить список всех комментариев нужного пользователя.
- Определение нужной даты. Проверка даты комментария с нужным нам диапазоном.
- Подсчет нужного аккаунта
- Заведение рейтинга - сохранение данных для определения рейтинга.
- Проделывание для всего списка сообщества.
- Вызов данных по комментарию (затем в иделает сделать в боте)
Все оказалось проще.
steem.api.getDiscussionsByComments({
"start_author": "jinzo",
"limit": 10
}, function (err, result) {
console.log(err, result);
});
Достаточно лишь спокойно отнестись к задаче.
Мы получаем 100 комментариев последних.
Врядли же пользователь сможет написать больше 100 комментариев за неделю?
Хотя... по 20 комментариев каждый день - вот уже 140 комментариев.
Ну окей, пока мы будем ограничены количеством 100 комментариев для анализа. Все, кто будет писать больше 100 комментариев - можно вручную считать.
Первая задача выполнена! Идем дальше.
var now = moment();
var input = moment("2016-04-17T11:45:00Z");
var isThisWeek = (now.isoWeek() == input.isoWeek())
Ставим библиотеку https://momentjs.com/
Надо скачать файл и устанавливаем библиотеку в nodejs:
npm install moment --save
и в скрипте добавляем для подключения библиотеки:
const moment= require('moment');
Задача вторая выполнена.
как и ожидается то появляются чисто технические моменты
например у Димы подсчет со среды до среды - а мне проще сделать чтобы в течении недели был подсчет. Т.е. с понедельника по понедельник
Думаю что пока буду делать как проще, а потом уже после внедрения можно будет менять.
Идем дальше.
Хочется сразу что-то подключить к боту.
Читаю инструкцию https://habr.com/ru/post/510760/
Подключаю бота!
const TelegramBot = require('node-telegram-bot-api');
// replace the value below with the Telegram token you receive from @BotFather
const token = 'YOUR_TELEGRAM_BOT_TOKEN';
// Create a bot that uses 'polling' to fetch new updates
const bot = new TelegramBot(token, {polling: true});
// Matches "/echo [whatever]"
bot.onText(//echo (.+)/, (msg, match) => {
// 'msg' is the received Message from Telegram
// 'match' is the result of executing the regexp above on the text content
// of the message
const chatId = msg.chat.id;
const resp = match[1]; // the captured "whatever"
// send back the matched "whatever" to the chat
bot.sendMessage(chatId, resp);
});
// Listen for any kind of message. There are different kinds of
// messages.
bot.on('message', (msg) => {
const chatId = msg.chat.id;
// send a message to the chat acknowledging receipt of their message
bot.sendMessage(chatId, 'Received your message');
});
Фух, прошло пару часов:
js```
const TelegramBot = require('node-telegram-bot-api');
var stat = 0;
const steem = require('steem');
var alexmove_stat;
// replace the value below with the Telegram token you receive from @BotFather
const token = 'фівфів:фівіфв-3h5Q8';
// Create a bot that uses 'polling' to fetch new updates
const bot = new TelegramBot(token, {polling: true});
// Matches "/echo [whatever]"
bot.onText(//echo (.+)/, (msg, match) => {
// 'msg' is the received Message from Telegram
// 'match' is the result of executing the regexp above on the text content
// of the messag
/// alexmove_stat = comments('alexmove')
;
alexmove_stat = sdfsdfsd
;
bot.sendMessage(chatId, 'Введите имя пользователя, количество комментариев которого вы хотите узнать. Количество комментариев на этой неделе. Внимание - считается с понедельника!');
});
function comments(author){
steem.api.getDiscussionsByComments({
"start_author": author,
"limit": 100
}, function (err, result) {
// console.log(err, result);
if (err === null) {
var i, len = result.length;
for (i = 0; i < len; i++) {
var discussion = result[i];
console.log(discussion.created);
cost moment= require('moment');
var now = moment();
var input = moment(discussion.created);
var isThisWeek = (now.isoWeek() == input.isoWeek())
console.log(isThisWeek);
if (isThisWeek === true) {
stat=stat+1;
}
}
} else {
console.log(err);
}
});
return stat;
}
// Listen for any kind of message. There are different kinds of
// messages.
bot.on('message', (msg) => {
const chatId = msg.chat.id;
const { id } = msg.chat;
alexmove_stat = comments('alexmove');
// send a message to the chat acknowledging receipt of their message
// bot.sendMessage(chatId, 'Введите имя пользователя, количество комментариев которого вы хотите узнать. Количество комментариев на этой неделе. Внимание - считается с понедельника!');
//if (msg.text === "alexmove")
//{ stat = alexmove_stat; }
//comments(msg.text);
// bot.sendMessage(chatId, JSON.stringify(msg));
//bot.sendMessage(chatId, alexmove_stat);
//stat = 0;
bot.sendMessage(chatId, alexmove_stat);
steem.api.getDiscussionsByComments({
"start_author": author,
"limit": 100
}, function (err, result) {
// console.log(err, result);
if (err === null) {
var i, len = result.length;
for (i = 0; i < len; i++) {
var discussion = result[i];
console.log(discussion.created);
cost moment= require('moment');
var now = moment();
var input = moment(discussion.created);
var isThisWeek = (now.isoWeek() == input.isoWeek())
console.log(isThisWeek);
if (isThisWeek === true) {
stat=stat+1;
}
}
} else {
console.log(err);
}
bot.sendMessage(chatId, stat);
});a
});
js```
Наброски телеграмм бота:
js```
const TelegramBot = require('node-telegram-bot-api');
const steem = require('steem');
// replace the value below with the Telegram token you receive from @BotFather
const token = '1997331759:AAE3uKEq-_QRvsQ6To3_q7zg5bE5M-3h5Q8';
// Create a bot that uses 'polling' to fetch new updates
const bot = new TelegramBot(token, {polling: true});
// Matches "/echo [whatever]"
bot.onText(//echo (.+)/, (msg, match) => {
// 'msg' is the received Message from Telegram
// 'match' is the result of executing the regexp above on the text content
// of the messag
});
// Listen for any kind of message. There are different kinds of
// messages.
bot.on('message', (msg) => {
const chatId = msg.chat.id;
const { id } = msg.chat;
// send a message to the chat acknowledging receipt of their message
if (msg.text === "alexmove")
{
bot.sendMessage(chatId, 'Статистика alexmove: 10 комментариев за неделю');
}
else bot.sendMessage(chatId, `Введите имя пользователя, количество комментариев которого вы хотите узнать. Количество комментариев на этой неделе. Внимание - считается с понедельника!
Пока работает только для:
alexmove
чтобы добавить себя, напишите @alexmove
Внимание!!!! Это прототип! Т.е. показывает как будет работать, пока не подключено к скрипту напрямую! Подробности: https://steemit.com/hive-171319/@alexmove/sozdanie-interaktivnogo-reitinga-soobshestva-steem-bru-podschet-kommentariev-na-nodejs-dlya-steemit`);
});
js```
Некоторые наброски для телеграмм бота готовы. Теперь, собственно, можно сделать тоже самое полноценно отдельно. Нужен запуск списка пользователей и/или сохранению в некую базу.
Либо, как вариант, не делать свою базу, но сделать список, и каждый раз запускать по списку всех пользователей сравнивая полученные рузальтаты между собой и тем самым формируя рейтинг пользователей.
Прототип телеграм-бота для определения рейтинга: @brustat_bot
http://t.me/brustat_bot
Очень близко к реализации.
Продолжение следует.
Можно тестить?)
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit