The Word Game. Start. Post #0

in Steem-BRU (BY-RU-UA)4 years ago (edited)

THE WORD GAME.png

So, I thought about packing the ratings into the game. And also add tasks there. And the ability to connect contests.

The idea is this. what is calculated from each rating and task - points. They are summed up, and already among the points there is a rating and reward. It turns out not a separate rating, but a more comprehensive analysis of the participant's activities.

The idea is to make a separate telegram bot, in the future to connect other options for accessing the game. Due to this, it will also be possible to attract new people to the game, and through it - to STEEMIT.

Yes, and in order not to postpone, I take it and do it. I'm starting to do it right now. The first thing to do is to get acquainted with the Database in nodejs, because now I am not familiar with this topic at all.

The rest of the post is in Russian.

Итак, я задумал упаковать рейтинги в игру. А также добавлять туда задания. И возможность подключать конкурсы.

Идея такая. что высчитывается из каждого рейтинга и задания - баллы. Они суммируются, и уже среди баллов идет рейтинг и вознаграждение. Получается не отдельный рейтинг, а более комплексный анализ деятельности участника.

Идея сделать затем отдельный телеграмм бот, в дальнейшем подключать другие возможности доступа к игре. За счет этого можно будет также привлекать новых людей к игре, а через нее - в STEEMIT.

Да, и чтобы не откладывать, беру и делаю. Начинаю делать прямо сейчас. Первое, что необходимо сделать - познакомится с Базой Данных в nodejs, потому что сейчас я не знаком с этой темой вообще.

База данных в nodejs

\

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "123456"
});
 
connection.query("CREATE DATABASE usersdb2",
  function(err, results) {
    if(err) console.log(err);
    else console.log("База данных создана");
});
 
connection.end();

Как оказалось, нужно установить MySql сервер на компьютере. А для этого зарегистрироваться пришлось на сайте. Что само по себе было небольшим квестом.

https://metanit.com/sql/mysql/1.1.php

image.png

Наконец-то после всех пройденных этапов - установка. Хотя лишь потом я прочел в инструкции, что можно было не логиться, а просто нажать на кнопку чуть ниже "Просто скайте мне".

image.png

Что-то не работает....

Так, внимание... не нужно устанавливать mysql сервер на компьютер. Это же nodejs, тут нужно всего-лишь подключить / инсталлировать библиотеки.

npm install --save mysql2

Или все же нужно?...
Да, все таки нужно.. )

Попробую найти онлайн базу данных для тестирования.
https://www.db4free.net/

Да уж, не все так просто.
Все же установил MYSQL сервер.

Не получается. Я уже больше часа буксую на самых базовых вещах. Пошел спать.

Утро

И я почти сразу нашел решение - я подключился от пользователя root. Вот действительно, что утро вечера мудренее! Еще бы поесть... )

Итак, вот рабочий скрипт - заготовка для работы с базой данных.

const mysql = require("mysql2");
 
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "xxxxxx"
  
});
 
connection.query("CREATE DATABASE sdasd1",
  function(err, results) {
    if(err) console.log(err);
    else console.log("База данных создана");
});
 
connection.end();

Идем дальше, теперь нам нужно:

а) завести таблицу для каждого пользователя и сохранять туда по дням данные.
б) начать работать с Post Rank и сохранять для сортировки данные в таблицу.
в) продумать (и это самое трудное) каким образом сохранять данные по дням. Возможно нужно создать еще одну таблицу, где я буду сохранять отсылку на таблицу и разметку по дням.

Впрочем, начнем.

image.png

Казалось бы, просто какие-то буквы. А это маленькая победа! Идем дальше.

https://metanit.com/web/nodejs/8.2.php

Формула рейтинга

На данный момент два варианта формулы.

Первый вариант:

Чтобы перевести рейтинг по комментариям в получение баллов в игре, берем простую формулу: (| (количество комментариев - количество всего участников) | по модулю) деленное на 10.

Второй вариант:

Количество участников минус количество комментариев, деленное на десять.
Например, если участник написал 1 комментарий. То 1 - 87 = -87, по модулю - 87. Делим на 10, получаем 8,7.

А если участник написал 86 комментарий, то тогда 86 - 87 = -1.

Все же первый вариант лучше.

Рейтинг комментариев в базу данных

Отвлекся на ~20 часов от программирования
Да, иногда бывает и такое. Но, продолжаю! Сейчас задача - переместить сохранение рейтинга комментариев в базу данных.

10:30 взял код рейтинга комментария, переделываю его
10:47 увлеченно чищу все это время код рейтинга, убираю не нужное
11:30 более менее подключил BD и опять столкнулся с проблемой, которую в прошлый раз не смог решить. Проблема от непонимания работы с функциями в JS, и это меня ооочень расстраивает. Скорее всего сейчас пойду есть.

11:41 заработало... смог добавить данные в bd

image.png

11:51 запустил на всем списке три раза, один раз сработало, и в базе появилось 87 записей. А два раза не сработало. Error: connect ETIMEDOUT... вот что делать, а...

Перезапустил, снова сработало. Работает через раз. Ну ладно, пока так.

const fs = require("fs");
const steem = require('steem');
let input, hive, fullbody, x1;
var author,author2;
var permlinkR;
var err;
let stat, stat2; 
             
    let array = fs.readFileSync('spisok.txt').toString().split("\n");
    let test_a = array[0].split(' ');
    console.log(test_a[2]);

len1 = test_a.length;
for (x1 = 0; x1 < len1; x1++) {

    steem.api.getDiscussionsByComments({
                    "start_author": test_a[x1],
                    "limit": 100
                }, function (err, result) {
                  console.log(err, result);
                    if (err === null) {
                    stat = 0;
                    console.log('asdasdasdas');

                    var i, len = result.length;
                    for (i = 0; i < len; i++) {
                        
                        var discussion = result[i];
                        var d = new Date(); // Today!
                        d.setDate(d.getDate() - 1); // Yesterday!
                        d = d.toJSON().split("T")[0];
                        
                        permlinkR = discussion.permlink;
                        
                        author = discussion.author;
                        author2 = author; 
                        input = discussion.created;
                        hive = discussion.category;
                    //  console.log(stat);

                        if ((input.indexOf(d) !== -1) && (hive === 'hive-171319')) {
                          stat=stat+1;
                          stat2 = stat;
                          fullbody = fullbody + ' ' + discussion.body;
                        }}
                            
                            const mysql = require("mysql2");
  
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "xxxx",
  password: "xxxxx"
});
                    const sql = `INSERT INTO c1610(author, count) VALUES('${author}', '${stat}')`;

                    connection.query(sql, function(err, results) {
                    if(err) console.log(err);
                    console.log(results);
                    });     

connection.end();

                    console.log('60 строка');           

                    console.log(stat,author);           
                                        
                    } else {
                        console.log('внимание поломка поломка поломка поломка');
                }}
                    
            
                    );


}

13:02

Итак, рабочий набор. Первый скрипт, создание таблицы:

let date_know;

const mysql = require("mysql2");

const connection = mysql.createConnection({
 host: "localhost",
 user: "root",
 database: "xxx",
 password: "xxx"
});

const sql = `create table if not exists с1410(
 id int primary key auto_increment,
 author varchar(255) not null,
 count int not null
)`;

connection.query(sql, function(err, results) {
   if(err) console.log(err);
   else console.log("Таблица создана");
});
connection.end();

Второй скрипт, наполнение таблицы данным и количестве комментариев:
Срабатывает через раз, иногда выдает ошибку таймаута.
Нужен файл spisok.txt - там через пробел все авторы, которых мы анализируем.

const fs = require("fs");
const steem = require('steem');
let input, hive, fullbody, x1;
var author,author2;
var permlinkR;
var err;
let stat, stat2; 

            
   let array = fs.readFileSync('spisok.txt').toString().split("\n");
   let test_a = array[0].split(' ');
   console.log(test_a[2]);

len1 = test_a.length;
for (x1 = 0; x1 < len1; x1++) {

   steem.api.getDiscussionsByComments({
                   "start_author": test_a[x1],
                   "limit": 100
               }, function (err, result) {
                 console.log(err, result);
                   if (err === null) {
                   stat = 0;
                   console.log('asdasdasdas');

                   var i, len = result.length;
                   for (i = 0; i < len; i++) {
                                               
                       var discussion = result[i];
                       var d = new Date(); // Today!
                       d.setDate(d.getDate() - 2); // Yesterday!
                       d = d.toJSON().split("T")[0];
                       
                       permlinkR = discussion.permlink;
                       
                       author = discussion.author;
                       author2 = author; 
                       input = discussion.created;
                       hive = discussion.category;
                   //  console.log(stat);

                       if ((input.indexOf(d) !== -1) && (hive === 'hive-171319')) {
                         stat=stat+1;
                         stat2 = stat;
                         fullbody = fullbody + ' ' + discussion.body;
                       }}
                           
                           const mysql = require("mysql2");
 
const connection = mysql.createConnection({
 host: "localhost",
 user: "root",
 database: "thewordgame",
 password: "xxxx"
});

connection.on('error', function() {});

                   const sql = `INSERT INTO с1510(author, count) VALUES('${author}', '${stat}')`;

                   connection.query(sql, function(err, results) {
                   if(err) console.log(err);
                   console.log(results);
                   });     

connection.end();

                   console.log('60 строка');           

                   console.log(stat,author);           
                                       
                   } else {
                       console.log('внимание поломка поломка поломка поломка');
               }}
                   
           
                   );


}


Так, теперь начинаю делать рейтинги за 14,15,16 числа.

https://steemit.com/hive-171319/@alexmove/reiting-za-24-chasa-14-10-2021-03-00-15-10-2021-03-00-rating-for-24-hours

Я добавил сортировку по возрастанию. И теперь еще нужно добавить номера в табличку.

Вот уже с Pointами https://steemit.com/steem/@alexmove/new-point-reiting-za-24-chasa-15-10-2021-03-00-16-10-2021-03-00-rating-for-24-hours

Спасибо за внимание! Впереди продолжение!