Skip to content

Commit

Permalink
add: form and info routers; remove: at routers
Browse files Browse the repository at this point in the history
  • Loading branch information
benchambule committed Aug 19, 2024
1 parent 356d46c commit 5ac1cf9
Show file tree
Hide file tree
Showing 34 changed files with 3,187 additions and 1,718 deletions.
90 changes: 45 additions & 45 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,28 @@ var reverse = new Bot(

reverse.at('main', async function(request){
const sentence = request.sentence;
const menu = {
text: '👉 ' + sentence.split("").reverse().join(""),
const message = {
body: '👉 ' + sentence.split("").reverse().join(""),
final: true
}

return {
menu: menu
message: message
};
});

(async () => {
let result = await reverse.process({msisdn: 123, prompt:"@reverse", sentence: "giberish"});
console.log(result.menu.text);
console.log(result.message.body);

result = await reverse.process({msisdn: 123, prompt:"@reverse", sentence: "bonjour le monde"});
console.log(result.menu.text);
console.log(result.message.body);

result = await reverse.process({msisdn: 123, prompt:"@reverse", sentence: "ola mundo"});
console.log(result.menu.text);
console.log(result.message.body);

result = await reverse.process({msisdn: 123, prompt:"@reverse", sentence: "hello world"});
console.log(result.menu.text);
console.log(result.message.body);
})();
```

Expand Down Expand Up @@ -76,71 +76,71 @@ reverse.intercept('main', async (request) => {
}

if(request.lang != 'pt' && request.lang != 'en'){
const menu = {
text: 'lang cannot be ' + "'" + request.lang+ "'" + ". lang should be 'en' or 'pt'",
const message = {
body: 'lang cannot be ' + "'" + request.lang+ "'" + ". lang should be 'en' or 'pt'",
final: true
}
return {
menu: menu
message: message
};
}
});

reverse.at('main', async function(request){
const txt = request.lang == 'pt'? 'Frase invertida' : 'Reversed sentence';
const prompt = request.sentence;
const menu = {
const message = {
title: txt,
text: prompt.split("").reverse().join(""),
body: prompt.split("").reverse().join(""),
final: true
}

return {
menu: menu
message: message
};
});

(async () => {
console.log((await reverse.process({msisdn: 123, prompt: "@reverse", sentence: "giberish"})).menu.text);
console.log((await reverse.process({msisdn: 123, prompt:"@reverse", sentence: "bonjour le monde", lang:"fr"})).menu.text);
console.log((await reverse.process({msisdn: 123, prompt:"@reverse", sentence: "ola mundo", lang:"pt"})).menu.text);
console.log((await reverse.process({msisdn: 123, prompt:"@reverse", sentence: "hello world", lang:"en"})).menu.text);
console.log((await reverse.process({msisdn: 123, prompt: "@reverse", sentence: "giberish"})).message.body);
console.log((await reverse.process({msisdn: 123, prompt:"@reverse", sentence: "bonjour le monde", lang:"fr"})).message.body);
console.log((await reverse.process({msisdn: 123, prompt:"@reverse", sentence: "ola mundo", lang:"pt"})).message.body);
console.log((await reverse.process({msisdn: 123, prompt:"@reverse", sentence: "hello world", lang:"en"})).message.body);
})();
```

Let's build another bot, this time it will have 3 menus and the user can navigate back and forth between between the menus. For this bot, we will need a session manager/storage implementation that the bot will use.
Let's build another bot, this time it will have 3 messages and the user can navigate back and forth between between the messages. For this bot, we will need a session manager/storage implementation that the bot will use.

```javascript
'use strict';

const {Bot} = require('lottus.js');

const menus = [
const messages = [
{
name: "welcome",
title: "Welcome",
message: "Language | Idioma",
options: [
{key:1, label:"English", menu:"english"},
{key:2, label:"Portugues", menu:"portuguese"},
{key:1, label:"English", message:"english"},
{key:2, label:"Portugues", message:"portuguese"},
]
},

{
name: "english",
title: "English",
message: "This menu is in english",
message: "This message is in english",
options: [
{key:0, label:"Back", menu:"welcome"}
{key:0, label:"Back", message:"welcome"}
]
},

{
name: "portuguese",
title: "Portugues",
message: "Este menu está em portugues",
message: "Este message está em portugues",
options: [
{key:0, label:"Voltar", menu:"welcome"}
{key:0, label:"Voltar", message:"welcome"}
]
}
]
Expand All @@ -154,20 +154,20 @@ var bot = new Bot(
}
);

bot.addMenus(menus);
bot.addMessages(messages);

(async () => {
let session = await bot.process({msisdn:123, prompt:"@bot"});
console.log(session.menu);
console.log(session.message);

session = await bot.process({msisdn:123, prompt:"1"}, session);
console.log(session.menu);
console.log(session.message);

session = await bot.process({msisdn:123, prompt:"0"}, session);
console.log(session.menu);
console.log(session.message);

session = await bot.process({msisdn:123, prompt:"2"}, session);
console.log(session.menu);
console.log(session.message);
})();
```

Expand All @@ -178,32 +178,32 @@ Let's now ensure that only the msisdn 123 can use the above bot

const {Bot} = require('lottus.js');

const menus = [
const messages = [
{
name: "welcome",
title: "Welcome",
message: "Language | Idioma",
options: [
{key:1, label:"English", menu:"english"},
{key:2, label:"Portugues", menu:"portuguese"},
{key:1, label:"English", message:"english"},
{key:2, label:"Portugues", message:"portuguese"},
]
},

{
name: "english",
title: "English",
message: "This menu is in english",
message: "This message is in english",
options: [
{key:0, label:"Back", menu:"welcome"}
{key:0, label:"Back", message:"welcome"}
]
},

{
name: "portuguese",
title: "Portugues",
message: "Este menu está em portugues",
message: "Este message está em portugues",
options: [
{key:0, label:"Voltar", menu:"welcome"}
{key:0, label:"Voltar", message:"welcome"}
]
}
]
Expand All @@ -217,34 +217,34 @@ var bot = new Bot(
}
);

bot.addMenus(menus);
bot.addMessages(messages);

bot.intercept('*', async function(request){
if(request.msisdn.toString() !== '123'){
const menu = {
const message = {
title: "This bot is only available for the msisdn 123",
final: true
};
return {
menu: menu
message: message
}
}
});

(async () => {
let session = await bot.process({msisdn:1234, prompt:"@bot"});
console.log(session.menu);
console.log(session.message);

session = await bot.process({msisdn:123, prompt:"@bot"});
console.log(session.menu);
console.log(session.message);

session = await bot.process({msisdn:123, prompt:"1"}, session);
console.log(session.menu);
console.log(session.message);

session = await bot.process({msisdn:123, prompt:"0"}, session);
console.log(session.menu);
console.log(session.message);

session = await bot.process({msisdn:123, prompt:"2"}, session);
console.log(session.menu);
console.log(session.message);
})();
```
131 changes: 28 additions & 103 deletions examples/bot.js
Original file line number Diff line number Diff line change
@@ -1,109 +1,34 @@
const {Bot} = require('../index');
import { Lottus } from "../index.js";

let input = new Lottus();

input.at("main",
// info
async function(_, res){
res.form = {input: "name"};
res.body = "Please tell me your profession";

return res;
},

// proc
async (req, res) => {
if(req.prompt.trim().length > 0){
res.body = "Congratulations. Your profession is " + req.prompt;
res.form = null;
}else {
res.body = "Profession cannot be empty. Please tell us your profession";
}

let info = new Bot(
{
name: "info-bot",
entrypoint: 'main',
keyword: "@info",
description: "Reverses a provided string"
return res;
}
);

info.at('main', async () => {
const menu = {
name: 'main',
title: "Welcome to Ben's bot",
message: "Select an option",
options: [
{key: 1, label: "name", menu: "name"},
{key: 2, label: "profession", menu: "profession"},
{key: 3, label: "age", menu: "age"},
{key: 4, label: "country", menu: "country"}
]
}
return {
menu: menu
};
});

info.at('profession', async () => {
const menu = {
name: 'profession',
title: "Ben's profession",
message: "Data Engineer @ VM",
options: [
{key: 0, label: "back", menu: "main"},
]
}
return {
menu: menu
};
});

info.at('name', async () => {
const menu = {
name: "name",
title: "Ben's full name",
message: "Benjamim J. Chambule",
options: [
{key: 0, label: "back", menu: "main"},
]
}
return {
menu: menu
};
});

info.at('age', async () => {
const menu = {
name: "age",
title: "Ben's age",
message: "Ben's age is 30",
options: [
{key: 0, label: "back", menu: "main"},
]
}
return {
menu: menu
};
});

info.at('country', async () => {
const menu = {
name: "country",
title: "Ben's country",
message: "Ben's country is Mozambique",
options: [
{key: 0, label: "back", menu: "main"},
]
}
return {
menu: menu
};
});

info.intercept('*', async (request) => {
if(request.prompt.trim() === '@exit'){
return {
menu: {
title: "Thank you for using Ben's bot",
}
}
}
});
(async () => {
let session = await info.process({msisdn: "123", prompt: "@info"});
console.log(session);

session = await info.process({msisdn: "123", prompt: "1"}, session);
console.log(session);

session = await info.process({msisdn: "123", prompt: "0"}, session);
console.log(session);
let message = await input.process({prompt: "hello"})
console.log(message);

session = await info.process({msisdn: "123", prompt: "2"}, session);
console.log(session);
message = await input.process({prompt: ""}, message);
console.log(message);

session = await info.process({msisdn: "123", prompt: "@exit"}, session);
console.log(session);
})();
message = await input.process({prompt: "Data engineer"}, message);
console.log(message);
Loading

0 comments on commit 5ac1cf9

Please sign in to comment.