import _ from 'lodash';
import {argv} from 'yargs';

import Client from './api';

class Bot {
  constructor(keys) {
    this.client = new Client(keys);
    this.badWords = [
        /[qk]u?r[wf][ao]/i // kurwa
      , /qwa/i
      , /jprdl/i
      , /pierdo\w+/i // pierdolić
      , /szmat[ao]/i // szmata
      , /cwel/i
      , /pi[zź]d[ayzo]i?e?/i
      , /testmanderigona/i
      , /penis/i
      , /pines/i
      , /cipk?a/i
      , /c?h[u|ó]j/i
      , /zajebi/i
      , /zapier/i
    ];
    this.templates = [
        '@<%= nick %>, wykryto wulgaryzmy w Twoim wpisie ( ͡° ʖ̯ ͡°) zrób #pokazmorde albo to zgłoszę. Wygenerowano automatycznie przez ostoje prawilności na Wykopie, **TestBot**'
      , '@<%= nick %>, wykryto wulgaryzmy w Twoim wpisie ( ͡° ʖ̯ ͡°) zrób #rozdajo albo to zgłoszę. Wygenerowano automatycznie przez ostoje prawilności na Wykopie, **TestBot**'
      , '@<%= nick %>, wykryto wulgaryzmy w Twoim wpisie ( ͡° ʖ̯ ͡°) zrób wyjdź z piwnicy albo to zgłoszę. Wygenerowano automatycznie przez ostoje prawilności na Wykopie, **TestBot**'
    ];
  }

  verifyString(str, patterns) {
    return !_.some(patterns, (word) => str.match(word));
  }

  parseEntry(data) {
    let checkBlock = (entry, comments=[]) => {
      if(!this.verifyString(entry['body'], this.badWords)) {
        let body = _.template(this.templates[Math.floor(this.templates.length * Math.random())])({nick: entry['author']});
        if(!_.find(comments, (comment) => comment['author'] == 'TestBot' && comment['body'].indexOf(entry['author']) === -1)) {
          this.client
            .request('entries/addcomment', {body}, {method: [data['id']]})
            .then((res) => {
              console.log(`${entry['author']} - wpis ${entry['id']} - zostal ukarany`, res);
            });
        }
      }
    };
    if(data['body'].indexOf('#bekazlewactwa') > -1 || !this.verifyString(data['body'], this.badWords))
      this.client.request('entries/index', null, {method: [data['id']]}).then(({comments}) => {
        comments = comments.concat([data]);
        _.each(comments, (entry) => checkBlock(entry, comments));
      });
  }

  run() {
    let search = () => {
      console.log('Przeszukuje mirko...');
      this.lastId = 0;
      this.client
        .request('stream/index')
        .then((data) => {
          _.each(data.reverse(), (entry) => {
            if(entry['id'] > this.lastId) {
              this.parseEntry(entry);
              this.lastId = entry['id'];
            }
          });
        });
    }

    search();
    setInterval(search.bind(this), 3 * 60 * 1000);
  }
};

// CLI
var keys = _.merge({
    app: process.env.appKey || '4Ac50eaivm'
  , secret: process.env.secretKey || 'H8IA8kj3rY'
  , account: process.env.accountKey || 'u146l0Xlsyj5rzcx56ZH'
}, argv);
new Bot(keys).run();
@@ -536,526 +536,82 @@
 k %25%3E
-, wykryto wulgaryzmy w Twoim wpisie ( %CD%A1%C2%B0 %CA%96%CC%AF %CD%A1%C2%B0) zr%C3%B3b #pokazmorde albo to zg%C5%82osz%C4%99. Wygenerowano automatycznie przez ostoje prawilno%C5%9Bci na Wykopie, **TestBot**'%0A      , '@%3C%25= nick %25%3E, wykryto wulgaryzmy w Twoim wpisie ( %CD%A1%C2%B0 %CA%96%CC%AF %CD%A1%C2%B0) zr%C3%B3b #rozdajo albo to zg%C5%82osz%C4%99. Wygenerowano automatycznie przez ostoje prawilno%C5%9Bci na Wykopie, **TestBot**'%0A      , '@%3C%25= nick %25%3E, wykryto wulgaryzmy w Twoim wpisie ( %CD%A1%C2%B0 %CA%96%CC%AF %CD%A1%C2%B0) zr%C3%B3b wyjd%C5%BA z piwnicy albo to zg%C5%82osz%C4%99. Wygenerowano automatycznie przez ostoje prawilno%C5%9Bci na Wykopie, **TestBot**
+ plz nie przeklinaj hultaju'%0A      , '@%3C%25= nick %25%3E nie przeklinaj mireczku
 '%0A  
@@ -962,24 +962,24 @@
 author'%5D%7D);%0A
+
         if(!
@@ -1042,59 +1042,8 @@
 Bot'
- && comment%5B'body'%5D.indexOf(entry%5B'author'%5D) === -1
 )) %7B

Fix texts