Skip to content

Friendly-Banana/wobot

Repository files navigation

WoBot

Features

WoBot comes with a ton of features, including:

Improved Events:
  • create a Discord Event, a thread and allow RSVP via reactions with a single command
  • export all events to your calendar (works on mobile)
Improved Emojis:
  • add, rename and remove
  • upload to convert images into emojis
  • copy emojis from other servers to your own
Easy Reaction Roles

simply react with the emojis you want

Memes:
  • Obama: when someone congratulates themselves
  • Cutie Pie: tell your friends how cute they are
ToDo list

store anything you like

Reminder

schedule whatever you like for later

Mensaplan

  • know what's up for lunch
  • show the next available plan
  • automatically skips weekends
  • find your friends

Screenshots

Not yet convinced? Have some images:

meme with four labeled sections: cherry pie, apple pie, pumpkin pie and the WoBot logo, a cartoon robot, tagged as 'cutie pie'. Obama giving himself a medal, both Obamas are labelled 'WoBot' list of reaction roles each with corresponding message and emoji Discord embed asking whether to create an emoji list of dishes in the Mensa Garching list of features as embeds with selector for feature state

Contributing

If you have a great idea or suggestion, feel free to open an issue. If you want a feature right now and can code, open a pull request. Please make sure to run cargo fmt before committing.

Running the Bot

  1. Create a Discord Bot on the Discord Developer Portal
  2. Copy the DISCORD_TOKEN
  3. Invite the bot to your server with all permissions you need (ADMINISTRATOR is the easiest).

With Cargo:

  1. Install Rust
  2. Run the bot with DISCORD_TOKEN='<your token>' cargo run

With Docker Compose:

  1. Install Docker Compose
  2. Put the bot token in a .env file in the root directory:
    export DISCORD_TOKEN='<your token>'
    
  3. Run the bot with docker compose up -d

Technical Overview

WoBot is a Discord Bot written in Rust with the Poise framework. It can be hosted on any server and uses a PostgresQL database.

The mensa plan uses the Eat API, the mensa coordinates link to Google Maps.

The Mensaplan API is written by myself in Elixir.

Environment Variables

Docker Compose automatically reads them from a .env file, for Cargo/the binary you need to set them, e.g. like so source .env. Only DISCORD_TOKEN is required, the others are optional.

Example .env file
export DISCORD_TOKEN=''		# https://discord.com/developers/applications
export CAT_API_TOKEN=''		# https://thecatapi.com/signup
export DOG_API_TOKEN=''		# https://thedogapi.com/signup
export MENSAPLAN_TOKEN=''	# https://github.com/Friendly-Banana/mensaplan#api

Configuration

config.hjson uses a human-friendly JSON version, HJson.

You can set up automatic reactions and replies based on keywords. All of them are case-insensitive. Auto-reactions match only on word boundaries, ignoring punctuation around them. For example, wobot would match WoBot! but not wo bot. WoBot can react with both Unicode and custom Discord emojis, even animated ones.

Example Config

// channel for event threads
event_channel_per_guild: {
  // guild_id: channel_id
  1: 1
},
auto_reactions: {
  robot: {
    name: "🤖"
  }
  vibing: {
    animated: true
    name: vibing
    // emoji id
    id: 1
  }
},
auto_replies: [
  {
    keywords: [
      "wobot info"
      "wobot help"
    ]
    // discord user id
    user: 1
    title: About WoBot
    description: "Hi, I'm **WoBot**, your friendly neighborhood bot. Please send any questions or feedback to my author, {user}. This message was sent {count} times. Have a nice day!"
    colour: 15844367
  }
]
link_fixes: {
  instagram.com: {
    tracking: "igsh"
  }
  reddit.com: {
    host: "old.reddit.com"
  }
}