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"
}
]