Restrict "respond" action based on roles (optional)
MarkBot for Discord
A Markov chain bot using markov-strings.
Usage
- Train the bot in a lengthy text channel:
- User:
!mark train - Markbot:
@User, Finished training from past 76394 messages.
- User:
- Ask the bot to say something:
- User:
!mark - Markbot:
This Shopko has a Linux release
- User:
Setup
First, create a Discord bot application.
Windows
Windows Requirements
- Node.js 12.0+ (Current)
- Installing with build tools is recommended
Windows Setup
-
Install Node.js 12.0 or newer.
-
Download this repository using git in a command prompt
git clone https://github.com/charlocharlie/markov-discord.gitor by just downloading and extracting the project zip from GitHub.
-
Open a command prompt in the
markov-discordfolder.# Install Windows build tools (if you didn't install build tools with Node) npm install --global windows-build-tools # NPM install non-development packages npm install # Build the Typescript npm run build -
Create a file called
config.jsonin the project directory with the contents:{ "prefix":"!mark", "game":"\"!mark help\" for help", "token":"k5NzE2NDg1MTIwMjc0ODQ0Nj.DSnXwg.ttNotARealToken5p3WfDoUxhiH" }Feel free to change the command prefix, game display. Add your bot token.
-
Run the bot:
npm start
Debian Linux
Debian Requirements
- Node.js 12.0+
- Python 2.7 (for erlpack)
- C++ build tools (for erlpack)
Download
# Clone this repository
git clone https://github.com/charlocharlie/markov-discord.git
cd markov-discord
Configure
Create a file called config.json in the project directory with the contents:
{
"prefix":"!mark",
"game":"\"!mark help\" for help",
"token":"k5NzE2NDg1MTIwMjc0ODQ0Nj.DSnXwg.ttNotARealToken5p3WfDoUxhiH",
"role": "Bot users"
}
Feel free to change the command prefix, game display. Add your bot token. Role is optional, if it is set, only the users who have that role can use text generation.
Install and Run
# Install Node.js if you haven't already
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
nvm install node
# NPM install non-development packages
npm install
# If you run into build errors, install the following packages:
sudo apt-get install python -y
sudo apt-get install build-essential -y
# Build the Typescript
npm run build
# Start the program
npm start
Docker
Setup with Docker Hub image
-
Install Docker for your OS.
-
Open a command prompts and run:
docker pull charlocharlie/markov-discord docker run --rm -d charlocharlie/markov-discord:latest
Setup with source
-
Install Docker for your OS.
-
Download this repository using git in a command prompt
git clone https://github.com/charlocharlie/markov-discord.gitor by just downloading and extracting the project zip from GitHub.
-
Open a command prompt in the markov-discord folder and run this one-liner:
docker run --rm -e TOKEN=YOUR.BOT.TOKEN -v config:/usr/src/markbot/config -it $(docker build -q .) # Be patient as the build output is suppressed
Changelog
0.7.3
- Fix crash when fetched messages is empty
- Update docs
- Update dependencies
0.7.2
- Fix @everyone replacement
0.7.1
- Readme updates
- Config loading fix
- Fix min score
- Add generator options to config
- Document Node 12 update
0.7.0
- Convert project to Typescript
- Optimize Docker build (smaller image)
- Load corpus from filesystem to reduce memory load
0.6.2
- Fix MarkovDB not loading on boot
0.6.1
- Fix bot crashing on scheduled regen
0.6.0
- Added Docker deploy functionality.
- Moved config and database to
./configdirectory. Existing configs will be migrated. - Config-less support via bot token located in an environment variable.
- Update dependencies.
- Change corpus regen time to 4 AM.
0.5.0
- Fixed bug where
!mark helpdidn't work. - Only admins can train.
- The bot responds when mentioned.
- The bot cannot mention @everyone.
- Added version number to help.
- Added
!mark ttsfor a quieter TTS response. - Readme overhaul.
- Simpler config loading.
0.4.0
- Huge refactor.
- Added
!mark debugwhich sends debug info alongside the message. - Converted the fetchMessages function to async/await (updating the requirement to Node.js 8).
- Updated module versions.
- Added faster unique-array-by-property function
- Added linting and linted the project.
0.3.0
- Added TTS support and random message attachments.
- Deleted messages no longer persist in the database longer than 24 hours.
0.2.0
- Updated training algorithm and data structure.
Thanks
Thanks to BotMaker-for-Discord which I used as a reference when during development.