Как заставить бота сказать случайную строку из текстового файла? - PullRequest
0 голосов
/ 20 сентября 2019

довольно плохо знаком с программированием, я создаю чат-бота Twitch и хочу добавить команду, что бот отвечает случайной строкой из текстового файла, и я пытаюсь найти переменные и / или модули для использования.

1 Ответ

0 голосов
/ 21 сентября 2019

mydata.json

JSON-файл с массивом строк.

[
  "This is a message",
  "Where are you?",
  "I'm calling from inside the house..."
]

main.js

const fs = require('fs');

// Read and parese the JSON file 
const messages = JSON.parse(fs.readFileSync('mydata.json','utf8'));

// get a random message
function getRandomMessage() {
  return messages[ Math.floor( Math.random() * messages.length ) ];
}


console.log(getRandomMessage());

На ваш второй вопрос ...

То есть вы хотите, чтобы он соответствовал фразе?Я могу сделать лучше, чем это.При использовании регулярного выражения одно и то же сообщение может соответствовать нескольким фразам.Я также разрешаю одной фразе совпадать с несколькими сообщениями, и она случайным образом выбирает одно из подходящих сообщений.

random_messages.js

const fs = require('fs');

function readMessages(filename) {
  // Read and parese the JSON file
  const messages = JSON.parse(fs.readFileSync(filename,"utf8"));
  // compile the regular expressions, case insensitive
  for (const message of messages) message.match = new RegExp( message.match, "i" );
  return messages;
}


// get a random message
function getRandomMessage(messges, phrase) {
  // Get a list of all matching messages
  const list = messages.filter( message => message.match.test( phrase ) );
  // Return null if there was no matching messages
  if (!list.length) return null;
  // Select a random message from the list of matching messages
  return list[ Math.floor( Math.random() * list.length ) ].text;
}

function test(messages) {
  console.log(getRandomMessage(messages, "Hello everyone!"));
  for (let i = 1; i <= 65536; i*=2) {
    const phrase = `I have ${i} bottles`;
    const response = getRandomMessage(messages, phrase);
    console.log( "User:", phrase);
    if (response) console.log("Bot", response);
  }
}

// Read all the messages ( you should do that one time at program startup. NOT for every chat message)
const messages = readMessages("random_messages.json");
test(messages);

random_messages.json

[
  {
    "text": "This is a message",
    "match": "^what is this\\?"
  },
  {
    "text": "Where are you?",
    "match" : "^hello\\b"
  },
  {
    "text": "Who are you?",
    "match" : "^hello\\b"
  },
  {
    "text": "Hello!!!!",
    "match" : "^hello\\b"
  },
  {
    "text": "Hello!!!! Nice to meet you!",
    "match" : "^hello\\b"
  },
  {
    "text": "Hello!!! There you are! I'm been waiting for you!",
    "match" : "^hello\\b"
  },
  {
    "text": "Wow! That is plenty of bottles!",
    "match" : "\\b(:?[1-9]\\d+|[5-9]) bottles\\b"
  }
]
...