# ModBot for Discord [![Crates.io][crates-badge]][crates-url] ![Rust version][rust-version] ![License][license-badge] [![GitHub Action][gha-badge]][gha-url] [![Discord][discord-badge]][discord] ModBot is a Discord bot for [mod.io] using [`modio-rs`] and [`twilight`].

SetupCommandsScreenshotsBuildingInstallationUsageLicense

## Setup You can invite the officially hosted ModBot to join your Discord server using the following URL https://discordbot.mod.io, or you can build and install your own version of ModBot by following the [instructions](#building) below. 1. Invite the ModBot . 2. View the games list `/games` and set the default game `/settings default-game ID`. 3. In the channel(s) you want the bot to post updates (mod added / edited), run the command `/subs add `. 4. Ensure the bot has `Send Messages` and `Embed Links` permissions in the channel(s) it is in to be able to function correctly. ## Commands Once you have invited ModBot to your server, you can set the default game using the command `/settings default-game ID`. Now when a user issues the command `/mods`, all of the mods for the game you specified will be returned. You can change the default game at any time. We recommend you also `/subs add ` to games you are interested in receiving push notifications from. For example in our [#bot channel], we have subscribed to a bunch of games and whenever a mod is updated, the channel is notified. Popular commands include: * `/game` return information about the default game * `/games [search]` return a list of all games * `/mods [ID|Name]` return a list of all mods belonging to the default game * `/popular` return a list of mods ordered by popularity * `/settings default-game ` set the default game * `/subs add [Tag..] [Type]` subscribe to a game for updates (mods added/edited) ``` /sub add 51 /sub add OpenXcom /sub add OpenXcom tags:"UFO Defense",Major /sub add "Skate XL" tags:"Real World Spot" /sub add Skate* tags:Gear,Deck ``` * `/subs list` see all games subscribed too * `/subs rm [Tag..] [Type]` unsubscribe from a game ``` /subs rm 51 /subs rm OpenXcom /subs rm OpenXcom tags:"UFO Defense",Major /subs rm "Skate XL" tags:"Real World Spot" /subs rm skate tags:Gear,Deck ``` * `/subs mods mute ` mute a mod from update notifications * `/subs mods muted` return a list of all muted mods * `/subs mods unmute ` unmute a mod from update notifications ## Screenshots ### Mod details ![command](https://user-images.githubusercontent.com/2128532/199087924-87e56fcd-a049-42d5-be92-c776799bbb21.png) ![details](https://user-images.githubusercontent.com/2128532/199013232-dc2468f0-0c79-4645-bc69-403cb65648c3.png) ### New Mod notification ![notification](https://user-images.githubusercontent.com/2128532/98248318-0e827f00-1f75-11eb-89d5-a55174d9fed5.png) ## Building ModBot is written in Rust, so you'll need to grab a [Rust installation] in order to compile it. Building is easy: ``` $ git clone https://github.com/nickelc/modio-bot $ cd modio-bot $ cargo build --release $ ./target/release/modbot ``` ### Building with bundled sqlite3 Use the feature `sqlite-bundled` to compile sqlite3 from source and link against that. ``` $ cargo build --features sqlite-bundled ``` ## Installation ### Cargo Install latest version from . ``` $ cargo install modbot $ $HOME/.cargo/bin/modbot ``` Install modbot from the `master` branch. ``` $ cargo install --git https://github.com/nickelc/modio-bot $ $HOME/.cargo/bin/modbot ``` ## Usage Create a `bot.toml` config file in the working directory. ```toml [bot] token="your discord bot token" database_url="/path/to/sqlite.db" [modio] api_key="your mod.io api key" ``` A example is provided as [`bot.example.toml`](bot.example.toml). #### Running the bot ```bash ./path/to/modbot ./path/to/modbot --config path/to/bot.toml ``` #### Logging Logging can be configured via environment variables. ```bash RUST_LOG=modio=debug,modbot=debug ``` See [`tracing_subscriber::EnvFilter`] for more information. #### Metrics By default, the metrics are exposed via Prometheus endpoint listing on `http://127.0.0.1:8080/metrics`. ```toml [metrics] addr = "127.0.0.1:3000" ``` ## License Licensed under either of - Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://apache.org/licenses/LICENSE-2.0) - MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) ### Contribution Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions. [crates-badge]: https://img.shields.io/crates/v/modbot.svg [crates-url]: https://crates.io/crates/modbot [rust-version]: https://img.shields.io/badge/rust-1.78%2B-lightgrey.svg?logo=rust [gha-badge]: https://github.com/nickelc/modio-bot/workflows/CI/badge.svg [gha-url]: https://github.com/nickelc/modio-bot/actions?query=workflow%3ACI [license-badge]: https://img.shields.io/badge/license-MIT%2FApache--2.0-blue.svg [discord]: https://discord.gg/XNX9665 [discord-badge]: https://img.shields.io/discord/541627648112066581.svg?label=support&logo=discord&color=7289DA&labelColor=2C2F33 [bot-invite-badge]: https://img.shields.io/static/v1.svg?label=%20&logo=discord&message=Invite%20ModBot&color=7289DA&labelColor=2C2F33 [bot-invite-url]: https://discordbot.mod.io [#bot channel]: https://discord.gg/QR7DGD7 [mod.io]: https://mod.io [`modio-rs`]: https://github.com/nickelc/modio-rs [`twilight`]: https://github.com/twilight-rs/twilight [`tracing_subscriber::EnvFilter`]: https://docs.rs/tracing-subscriber/0.2/?search=EnvFilter [Rust Installation]: https://www.rust-lang.org/tools/install