Skip to content

Discord bot to monitor uptime of services using ping and http requests

License

Notifications You must be signed in to change notification settings

finlaysawyer/discord-uptime

Repository files navigation

discord-uptime

Code style: black

Discord Uptime is a Discord bot that allows you to monitor the uptime of services using ICMP ping, tcp and http requests. There are also commands available to make manual requests. Built using discord.py, aioping and aiohttp.

Installation

Requires Python 3.8+

Install dependencies:

pip install -r requirements.txt

Bot setup (Rename config.example.json and edit the default values):

  • token - Discord bot token
  • prefix - Discord bot prefix
  • activity_type - Activity type for bot status (must be one of playing, streaming, listening, watching)
  • activity_name - Text for bot status
  • disable_help - If true, the default help command will be disabled
  • hide_ips - If true, any IP addresses in notifications or the status command will be hidden
  • notification_channel - Channel ID where down/up notifications will be sent
  • retries - How many retries to complete before flagging a server with down status
  • role_to_mention - Role ID which will be tagged in down/up notifications
  • secs_between_ping - How many seconds between each uptime check
  • timeout - How many seconds before a ping or HTTP request should timeout

NOTE: You must enable the Message Content intent in order to run v2.0+.

Running the bot

The bot can be run via the bot.py entrypoint, e.g. python -m bot.

Docker Image

You can also run the Bot via Docker, simply run:

docker run --name discord-uptime -d -v $PWD/config.json:/app/config.json:ro -v $PWD/servers.json:/app/servers.json:ro --restart=on-failure ghcr.io/finlaysawyer/discord-uptime:master

You can also use a release tag (e.g. v2.0.0) instead of master. With this configuration you still need to manually create config.json and servers.json for the Bot to start, please refer to the appropriate instructions if unsure.

Servers Configuration

Servers should be setup similar to the examples already in server.json:

  • There are three supported types: http, tcp and ping
[
    {
      "name": "Google",
      "type": "http",
      "address": "google.com"
    },
    {
      "name": "Gmail SMTP",
      "type": "tcp",
      "address": "smtp.gmail.com:465",
    },
    {
      "name": "Cloudflare",
      "type": "ping",
      "address": "1.1.1.1"
    }
]

Commands

Default Prefix: >

  • ping <address> [pings] - Pings an address once, or for the amount specified via pings and returns the delay in ms
  • http <address> - Performs a HTTP request to the specified address and returns the response code
  • status - Displays the status of all servers setup in servers.json

Screenshots

Status Command

status

Uptime & Downtime Notifications

uptime

Hide IP addresses

hideips

Contributing

Contributions are welcome. I use flake8 & black for linting and there is a pre-commit config in the repo to run these tools against local commits.