# MarkBot for Discord A Markov chain bot using markov-strings. ## Usage 1. Train the bot in a lengthy text channel: * User: `!mark train` * Markbot: `@User, Finished training from past 76394 messages.` 1. Ask the bot to say something: * User: `!mark` * Markbot: `This Shopko has a Linux release` ## Setup First, create a [Discord bot application](https://discordapp.com/developers/applications/). ### Windows #### Windows Requirements * [Node.js 12.0+ (Current)](https://nodejs.org/en/download/) * Installing with build tools is recommended #### Windows Setup 1. Install Node.js 12.0 or newer. 1. Download this repository using git in a command prompt ```cmd git clone https://github.com/charlocharlie/markov-discord.git ``` or by just downloading and extracting the [project zip](https://github.com/charlocharlie/markov-discord/archive/master.zip) from GitHub. 1. Open a command prompt in the `markov-discord` folder. ```sh # 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 ``` 1. Create a file called `config.json` in the project directory with the contents: ```json { "prefix":"!mark", "game":"\"!mark help\" for help", "token":"k5NzE2NDg1MTIwMjc0ODQ0Nj.DSnXwg.ttNotARealToken5p3WfDoUxhiH" } ``` Feel free to change the command prefix, game display. Add your bot token. 1. Run the bot: ```sh npm start ``` ### Debian Linux #### Debian Requirements * Node.js 12.0+ * Python 2.7 (for erlpack) * C++ build tools (for erlpack) #### Download ```sh # 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: ```json { "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 ```sh # 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 1. Install Docker for your OS. 1. Open a command prompts and run: ```sh docker pull charlocharlie/markov-discord docker run --rm -d charlocharlie/markov-discord:latest ``` #### Setup with source 1. Install Docker for your OS. 1. Download this repository using git in a command prompt ```sh git clone https://github.com/charlocharlie/markov-discord.git ``` or by just downloading and extracting the [project zip](https://github.com/charlocharlie/markov-discord/archive/master.zip) from GitHub. 1. Open a command prompt in the markov-discord folder and run this one-liner: ```sh 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 `./config` directory. 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 help` didn't work. * Only admins can train. * The bot responds when mentioned. * The bot cannot mention @everyone. * Added version number to help. * Added `!mark tts` for a quieter TTS response. * Readme overhaul. * Simpler config loading. ### 0.4.0 * Huge refactor. * Added `!mark debug` which 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](https://github.com/CorySanin/BotMaker-for-Discord) which I used as a reference when during development.