e30920067f
- Updated docker-compose.yml to expose dashboard on port 8080. - Enhanced main.py with timezone database caching and improved state management. - Introduced a minimal dashboard using Flask to display webhook status and notifications. - Added templates.json for customizable embed messages in Discord notifications. - Created templates.py for loading and saving notification templates. - Implemented tests for dashboard rendering and main functionality. - Added requirements for Flask and tzdata to support new features. - Included test cases for timezone handling and template management.
119 lines
2.9 KiB
Markdown
119 lines
2.9 KiB
Markdown
# Discord Webhook 420 Notification App
|
|
|
|
This Python application sends notifications to a Discord channel via webhook every hour at HH:15 (5 minute reminder) and at HH:20.
|
|
|
|
## Setup
|
|
|
|
1. Install dependencies:
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
2. Set up your Discord webhook:
|
|
- Go to your Discord server settings > Integrations > Webhooks
|
|
- Create a new webhook and copy the URL
|
|
|
|
3. Update the `.env` file with your webhook URL, bot token, channel ID, and guild ID:
|
|
|
|
```text
|
|
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/your_webhook_id/your_webhook_token
|
|
DISCORD_BOT_TOKEN=your_bot_token
|
|
DISCORD_CHANNEL_ID=your_channel_id
|
|
DISCORD_GUILD_ID=your_guild_id
|
|
```
|
|
|
|
- To get a bot token, create a Discord bot in the [Discord Developer Portal](https://discord.com/developers/applications) and invite it to your server with the `Manage Messages` permission.
|
|
- The channel ID can be found by enabling Developer Mode in Discord and right-clicking the channel name.
|
|
|
|
## Running the App
|
|
|
|
Run the application:
|
|
|
|
```bash
|
|
python main.py
|
|
```
|
|
|
|
The app will run continuously and send notifications at the scheduled times.
|
|
|
|
### Dashboard
|
|
|
|
By default, a minimal dashboard is available at `http://localhost:8080/`.
|
|
|
|
You can disable it by setting `DASHBOARD_ENABLED=0`.
|
|
|
|
### Admin
|
|
|
|
You can edit the embed message templates at `http://localhost:8080/admin`.
|
|
|
|
- Templates are saved to `templates.json` by default.
|
|
- Override the location with `TEMPLATES_PATH=/path/to/templates.json`.
|
|
|
|
## Requirements
|
|
|
|
- Python 3.6+
|
|
- Discord webhook URL
|
|
|
|
## Docker
|
|
|
|
Build the Docker image from the provided `Dockerfile`:
|
|
|
|
```bash
|
|
docker build -t thc-webhook .
|
|
```
|
|
|
|
Run the container (pass your webhook URL via environment variable):
|
|
|
|
```bash
|
|
docker run -d \
|
|
--name thc-webhook-app \
|
|
-e DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/your_webhook_id/your_webhook_token" \
|
|
thc-webhook
|
|
```
|
|
|
|
View logs:
|
|
|
|
```bash
|
|
docker logs -f thc-webhook-app
|
|
```
|
|
|
|
Stop and remove the container:
|
|
|
|
```bash
|
|
docker stop thc-webhook-app && docker rm thc-webhook-app
|
|
```
|
|
|
|
### Run with Docker Compose (recommended)
|
|
|
|
A `docker-compose.yml` is included for easy deployment. It reads `DISCORD_WEBHOOK_URL` from the environment. Create a `.env` next to the `docker-compose.yml` with your webhook URL or export the variable in your shell.
|
|
|
|
Example `.env`:
|
|
|
|
```text
|
|
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/your_webhook_id/your_webhook_token
|
|
```
|
|
|
|
Start the service:
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
Check service logs:
|
|
|
|
```bash
|
|
docker compose logs -f
|
|
```
|
|
|
|
Stop the service:
|
|
|
|
```bash
|
|
docker compose down
|
|
```
|
|
|
|
### Notes
|
|
|
|
- For production, prefer passing the webhook URL via a secret manager or Docker secrets rather than committing it to `.env`.
|
|
- The container runs the app as a non-root user for improved security.
|
|
- Use your system's Docker service (Docker Desktop, Docker Engine) to manage images and containers.
|