Skip to content

Instantly share code, notes, and snippets.

@RSamaium
Created September 24, 2022 13:35
Show Gist options
  • Save RSamaium/4275ca0c85f76677e0645523a427acec to your computer and use it in GitHub Desktop.
Save RSamaium/4275ca0c85f76677e0645523a427acec to your computer and use it in GitHub Desktop.
Event as Chatbot
import { RpgEvent, EventData, RpgPlayer } from '@rpgjs/server'
import { NlpManager } from 'node-nlp'
const trainNpc = async () => {
const manager = new NlpManager({ languages: ['en'], forceNER: true });
manager.addDocument('en', 'goodbye for now', 'greetings.bye');
manager.addDocument('en', 'bye bye take care', 'greetings.bye');
manager.addDocument('en', 'okay see you later', 'greetings.bye');
manager.addDocument('en', 'bye for now', 'greetings.bye');
manager.addDocument('en', 'i must go', 'greetings.bye');
manager.addDocument('en', 'hello', 'greetings.hello');
manager.addDocument('en', 'hi', 'greetings.hello');
manager.addDocument('en', 'howdy', 'greetings.hello');
// Train also the NLG
manager.addAnswer('en', 'greetings.bye', 'Till next time');
manager.addAnswer('en', 'greetings.bye', 'see you soon!');
manager.addAnswer('en', 'greetings.hello', 'Hey there!');
manager.addAnswer('en', 'greetings.hello', 'Greetings!');
await manager.train();
return manager
}
@EventData({
name: 'EV-1',
hitbox: {
width: 32,
height: 16
}
})
export class VillagerEvent extends RpgEvent {
manager: NlpManager
async onInit() {
this.setGraphic('female132')
this.manager = await trainNpc()
}
async onAction(player: RpgPlayer) {
const gui = player.gui('prompt')
const { promptText } = await gui.open({
text: 'What do you want to tell me?'
}, {
waitingAction: true,
blockPlayerInput: true
})
const response = await this.manager.process('en', promptText)
const answer = response.answer ?? 'What ?'
await player.showText(answer, {
talkWith: this
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment