Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wvffle/mineflayer-dashboard
https://github.com/wvffle/mineflayer-dashboard
hacktoberfest
Last synced: 19 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/wvffle/mineflayer-dashboard
- Owner: wvffle
- License: mit
- Created: 2020-02-03T21:21:32.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2023-12-29T11:37:03.000Z (11 months ago)
- Last Synced: 2024-05-17T05:21:14.172Z (6 months ago)
- Topics: hacktoberfest
- Language: JavaScript
- Homepage:
- Size: 692 KB
- Stars: 60
- Watchers: 3
- Forks: 5
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# mineflayer-dashboard
A dashboard layout for single mineflayer bot.![dashboard screenshot](docs/screenshot.png)
## Table of contents
- [Installation](#installation)
* [Install using yarn](#install-using-yarn)
* [Install using npm](#install-using-npm)
- [Initialization](#initialization)
- [Layout](#layout)
- [Logging](#logging)
* [Error logging](#error-logging)
- [Modes](#modes)
* [Included modes](#included-modes)
* [Defining custom modes](#defining-custom-modes)
+ [Example `whisper` mode](#example-whisper-mode)
- [Commands](#commands)
* [Running commands](#running-commands)
* [Available commands](#available-commands)
* [Custom commands](#custom-commands)## Installation
### Install using yarn
Install the package with yarn
```shell script
yarn add mineflayer-dashboard
```
### Install using npm
Install the package with npm
```shell script
npm install --save mineflayer-dashboard
```
## Initialization
Then load up the plugin using mineflayer.
You can pass `options` argument:
- `chatPattern` - a pattern that is tested against a message to determine if it's chat message or a system message. It's better to add this option as mineflayer's chat pattern will match messages like `[SkinsRestorer] Your skin has been changed.`. Also custom patterns are much faster than mineflayer's default one.
```js
bot.loadPlugin(require('mineflayer-dashboard')({
chatPattern: /^» \w+? » /
}))
// or
bot.loadPlugin(require('mineflayer-dashboard'))
```## Layout
```
+--------------------+-----------+
| | |
| | |
| MODE WINDOW | LOG |
| | |
| | |
+----+---------------+-----------+
|MODE| TEXT INPUT |
+----+---------------------------+
```- **TEXT INPUT** - Here you insert your text / commands
- **MODE** - Mode indicator, tells you current mode
- **LOG** - Here you can print out some stuff
- **MODE WINDOW** - Here you can print out mode related stuff## Logging
Logging in log window is accessible by using `bot.dashboard.log` function.**NOTE:** Please do **not** use `console.log` as it may create some unwanted artifacts. If any other dependency is using `console.log` you may try to overwrite this function by
```js
bot.once('inject_allowed', () => {
global.console.log = bot.dashboard.log
global.console.error = bot.dashboard.log
})
```### Error logging
All error logging is passed to the dashboard log window. That means all of the error handlers created before plugin load are no longer listened. This was a crucial step to maintain the layout of the app.## Modes
### Included modes
Dashboard comes with 2 modes:
- `CHAT` - Default mode. In `CHAT` mode you can see all of the chat messages sent to the player.
- `REPL` - In `REPL` mode you can run javascript code to control over your bot.### Defining custom modes
We expose `Mode` class in the `bot.dashboard`.The first parameter is mode name. It'll be used to create `:` command to switch to this mode
Second one is options:
- `fg` - foreground color for mode indicator
- `bg` - background color for mode indicator
- `interpreter` - It defines what is happening when you hit enter in the text input. Bound to mode instance
- `completer` - This function should return `String[]` or `Promise` with the completions to current string. Bound to mode instance
- A single completion needs to be the remainder of the completed string. For example, when I want to complete nickname `wvffle` and I hit `` with cursor posiotioned in position `wv|` then I need to return `[ 'ffle' ]`
- `bypassDefaultCompletion` - bypass default completion system, don't cache matches.#### Example `whisper` mode
When in this mode, we can send messages to different players. To change the reciever simply add ` :to ` at the end of the message
```js
let lastUser = null
const whisper = new bot.dashboard.Mode('whisper', {
bg: 'blue',
interpreter (string) {
let words = string.split(' ')// Check if we change receiver
if (/ :to \w{3,16}$/.test(string)) {
lastUser = words[words.length - 1]
words = words.slice(0, -2)
}
// Log an error if there is no receiver
if (lastUser === null) {
return bot.dashboard.log("No receiver set, please add ' :to ' at the end of the message")
}// Send message
const message = words.join(' ')
bot.chat(`/msg ${lastUser} ${message}`)
this.println(`to ${lastUser}: ${message}`)
},
async completer (string) {
// We're using already well defined minecraft completer
return bot.dashboard._minecraftCompleter(string)
}
})bot.dashboard.addMode(whisper)
bot.on('whisper', (username, message) => {
// Log a notification if not in whisper mode
if (bot.dashboard.mode !== whisper) {
return bot.dashboard.log(`You have a new message from ${username}`)
}// Display messages in the mode
whisper.println(`${username}: ${message}`)
})
```## Commands
### Running commands
Simply type `: arg1 arg2...`
```shell script
:say wvffle "I like waffles"
```
**NOTE:** In this case `:say` is a custom command
**NOTE:** In this case `"I like waffles"` is a string passed as arg2### Available commands
We provide some basic commands for the dashboard.
- `:help` - Display available commands
- `:exit` - Kill the bot / exit the application
- `:clear` - Clear mode window
- `:` - Change to `` mode
- `:chat` - Change to `CHAT` mode
- `:repl` - Change to `REPL` mode
### Custom commands
You can add custom commands by simply doing
```js
bot.dashboard.commands['say'] = (user, ...words) => {
const sentence = words.join(' ')
bot.chat(`/forcesay ${user} ${sentence}`)
}
```