Compare commits
44 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
a9bff4d2de
|
|||
|
80f26fd37b
|
|||
|
6afa5c3072
|
|||
|
51f0fa7250
|
|||
|
8b0ad4effa
|
|||
|
7ffa8e7789
|
|||
|
|
1e482ac330
|
||
|
0352a7ff22
|
|||
|
71731015ad
|
|||
|
db3fb9d32e
|
|||
|
299801e8c3
|
|||
|
1e28219ad8
|
|||
|
9557d4ec8f
|
|||
|
b0611ff035
|
|||
|
8ad67d4dcc
|
|||
|
2d236dc9cd
|
|||
|
0af2b07d09
|
|||
|
a60cc911d0
|
|||
|
e39dd51967
|
|||
|
4ca2e4cc79
|
|||
|
c8e2494b22
|
|||
|
01a682635b
|
|||
|
775445a02b
|
|||
|
71d620c163
|
|||
|
1497d959bf
|
|||
|
8baec677fc
|
|||
|
926f03a525
|
|||
|
55b174927b
|
|||
|
5c88d08c6f
|
|||
|
79c1f5b147
|
|||
|
a468824d30
|
|||
|
efc17fba23
|
|||
|
148f2901e4
|
|||
|
2853d0d66e
|
|||
| cdae81a6ee | |||
|
ad3eda601a
|
|||
| 5efdee2752 | |||
|
ab514cab11
|
|||
| 6063452c64 | |||
|
534c652bb5
|
|||
| dda548b5fc | |||
| 42cc6aa29e | |||
| c745405064 | |||
| ecfde46f94 |
32
.gitea/workflows/build-docker-push.yml
Normal file
32
.gitea/workflows/build-docker-push.yml
Normal file
@@ -0,0 +1,32 @@
|
||||
name: build-docker
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- staging
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Login to Docker Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ vars.DOCKER_REGISTRY_FQDN }}
|
||||
username: ${{ vars.DOCKER_REGISTRY_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_REGISTRY_TOKEN }}
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
driver: docker
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
push: true
|
||||
tags: ${{ vars.DOCKER_REGISTRY_FQDN }}/${{ vars.DOCKER_IMAGE_USERNAME }}/${{ vars.DOCKER_IMAGE_NAME }}:${{ gitea.REF_NAME }}
|
||||
secrets: |
|
||||
GIT_AUTH_TOKEN=${{ secrets.DOCKER_REGISTRY_TOKEN }}
|
||||
30
.gitea/workflows/build-docker-release.yml
Normal file
30
.gitea/workflows/build-docker-release.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
name: build-docker-release
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- published
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Login to Docker Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ vars.DOCKER_REGISTRY_FQDN }}
|
||||
username: ${{ vars.DOCKER_REGISTRY_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_REGISTRY_TOKEN }}
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
driver: docker
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
push: true
|
||||
tags: ${{ vars.DOCKER_REGISTRY_FQDN }}/${{ vars.DOCKER_IMAGE_USERNAME }}/${{ vars.DOCKER_IMAGE_NAME }}:${{ gitea.REF_NAME }},${{ vars.DOCKER_REGISTRY_FQDN }}/${{ vars.DOCKER_IMAGE_USERNAME }}/${{ vars.DOCKER_IMAGE_NAME }}:latest
|
||||
secrets: |
|
||||
GIT_AUTH_TOKEN=${{ secrets.DOCKER_REGISTRY_TOKEN }}
|
||||
28
.gitea/workflows/build-docker.yml
Normal file
28
.gitea/workflows/build-docker.yml
Normal file
@@ -0,0 +1,28 @@
|
||||
name: build-docker
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Login to Docker Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ vars.DOCKER_REGISTRY_FQDN }}
|
||||
username: ${{ vars.DOCKER_REGISTRY_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_REGISTRY_TOKEN }}
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
driver: docker
|
||||
- name: Build
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
push: false
|
||||
tags: ${{ vars.DOCKER_REGISTRY_FQDN }}/${{ vars.DOCKER_IMAGE_USERNAME }}/${{ vars.DOCKER_IMAGE_NAME }}:${{ gitea.REF_NAME }}
|
||||
11
README.md
11
README.md
@@ -105,6 +105,17 @@ contain data that shouldn't normally be logged.
|
||||
|
||||
As an experiment, Docker deployment option has been added.
|
||||
|
||||
### Starting the bot
|
||||
|
||||
1. Install MongoDB using the [official installation manual](https://www.mongodb.com/docs/manual/installation)
|
||||
2. Download
|
||||
the [configuration example file](https://git.end-play.xyz/HoloUA/Discord/src/branch/main/config_example.json) and
|
||||
store it somewhere you would like your bot to access it
|
||||
3. Complete the [configuration](#Configuration) step for this file
|
||||
4. `docker run -d -v /path/to/config.json:/app/config.json --name holoua-discord git.end-play.xyz/holoua/holoua-discord`
|
||||
|
||||
## Building Docker images [Experimental]
|
||||
|
||||
### Building the image
|
||||
|
||||
1. `git clone https://git.end-play.xyz/HoloUA/Discord.git`
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
import logging
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from logging import Logger
|
||||
from typing import Literal
|
||||
|
||||
from aiohttp import ClientSession, ClientTimeout
|
||||
from apscheduler.triggers.cron import CronTrigger
|
||||
from apscheduler.triggers.date import DateTrigger
|
||||
from libbot.cache.classes import CacheMemcached, CacheRedis
|
||||
from libbot.cache.manager import create_cache_client
|
||||
from libbot.pycord.classes import PycordBot
|
||||
@@ -13,8 +18,45 @@ class HoloBot(PycordBot):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self._schedule_jobs()
|
||||
self._set_cache_engine()
|
||||
|
||||
def _set_cache_engine(self) -> None:
|
||||
if "cache" in self.config and self.config["cache"]["type"] is not None:
|
||||
self.cache = create_cache_client(self.config, self.config["cache"]["type"])
|
||||
cache_type: Literal["redis", "memcached"] | None = self.config["cache"]["type"]
|
||||
|
||||
if "cache" in self.config and cache_type is not None:
|
||||
self.cache = create_cache_client(
|
||||
self.config,
|
||||
cache_type,
|
||||
prefix=self.config["cache"][cache_type]["prefix"],
|
||||
default_ttl_seconds=3600,
|
||||
)
|
||||
|
||||
async def _send_heartbeat(self) -> None:
|
||||
if self.config["monitoring"]["enabled"] is False:
|
||||
return
|
||||
|
||||
async with ClientSession() as session:
|
||||
await session.post(
|
||||
self.config["monitoring"]["url"],
|
||||
headers={
|
||||
"Authorization": f"Bearer {self.config['monitoring']['token']}"
|
||||
},
|
||||
timeout=ClientTimeout(3.0),
|
||||
)
|
||||
|
||||
def _schedule_jobs(self) -> None:
|
||||
if self.scheduler is None:
|
||||
return
|
||||
|
||||
self.scheduler.add_job(
|
||||
self._send_heartbeat,
|
||||
trigger=DateTrigger(
|
||||
datetime.now(tz=timezone.utc) + timedelta(seconds=5),
|
||||
timezone=timezone.utc,
|
||||
),
|
||||
)
|
||||
self.scheduler.add_job(
|
||||
self._send_heartbeat,
|
||||
trigger=CronTrigger.from_crontab("* * * * *"),
|
||||
)
|
||||
|
||||
@@ -25,12 +25,19 @@
|
||||
"cache": {
|
||||
"type": null,
|
||||
"memcached": {
|
||||
"uri": "127.0.0.1:11211"
|
||||
"uri": "127.0.0.1:11211",
|
||||
"prefix": null
|
||||
},
|
||||
"redis": {
|
||||
"uri": "redis://127.0.0.1:6379/0"
|
||||
"uri": "redis://127.0.0.1:6379/0",
|
||||
"prefix": null
|
||||
}
|
||||
},
|
||||
"monitoring": {
|
||||
"enabled": false,
|
||||
"url": "https://status.example.org/api/v1/endpoints/my-group_my-service/external?success=true",
|
||||
"token": "12345678"
|
||||
},
|
||||
"logging": {
|
||||
"size": 512,
|
||||
"location": "logs"
|
||||
|
||||
31
migrations/202507091444.py
Normal file
31
migrations/202507091444.py
Normal file
@@ -0,0 +1,31 @@
|
||||
import logging
|
||||
from logging import Logger
|
||||
|
||||
from libbot.utils import config_set, config_delete
|
||||
from mongodb_migrations.base import BaseMigration
|
||||
|
||||
logger: Logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Migration(BaseMigration):
|
||||
def upgrade(self):
|
||||
try:
|
||||
config_set("prefix", None, "cache", "memcached")
|
||||
config_set("prefix", None, "cache", "redis")
|
||||
except Exception as exc:
|
||||
logger.error(
|
||||
"Could not upgrade the config during migration '%s' due to: %s",
|
||||
__name__,
|
||||
exc,
|
||||
)
|
||||
|
||||
def downgrade(self):
|
||||
try:
|
||||
config_delete("prefix", "cache", "redis")
|
||||
config_delete("prefix", "cache", "memcached")
|
||||
except Exception as exc:
|
||||
logger.error(
|
||||
"Could not downgrade the config during migration '%s' due to: %s",
|
||||
__name__,
|
||||
exc,
|
||||
)
|
||||
33
migrations/202604081644.py
Normal file
33
migrations/202604081644.py
Normal file
@@ -0,0 +1,33 @@
|
||||
import logging
|
||||
from logging import Logger
|
||||
|
||||
from libbot.utils import config_set, config_delete
|
||||
from mongodb_migrations.base import BaseMigration
|
||||
|
||||
logger: Logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Migration(BaseMigration):
|
||||
def upgrade(self):
|
||||
try:
|
||||
config_set("enabled", False, "monitoring")
|
||||
config_set("url", "", "monitoring")
|
||||
config_set("token", "", "monitoring")
|
||||
except Exception as exc:
|
||||
logger.error(
|
||||
"Could not upgrade the config during migration '%s' due to: %s",
|
||||
__name__,
|
||||
exc,
|
||||
)
|
||||
|
||||
def downgrade(self):
|
||||
try:
|
||||
config_delete("monitoring", "enabled")
|
||||
config_delete("monitoring", "url")
|
||||
config_delete("monitoring", "token")
|
||||
except Exception as exc:
|
||||
logger.error(
|
||||
"Could not downgrade the config during migration '%s' due to: %s",
|
||||
__name__,
|
||||
exc,
|
||||
)
|
||||
@@ -1,13 +1,13 @@
|
||||
# Waifu pics related dependencies (not listed directly by waifupics)
|
||||
aiohttp>=3.10.0
|
||||
requests>=2.32.2
|
||||
aiohttp>=3.10.0,<4.0.0
|
||||
requests>=2.32.2,<3.0.0
|
||||
|
||||
aiofiles~=24.1.0
|
||||
apscheduler>=3.10.0
|
||||
aiofiles>=23.0.0,<26.0.0
|
||||
apscheduler>=3.0.0,<4.0.0
|
||||
async_pymongo==0.1.11
|
||||
libbot[speed,pycord,cache]==4.1.0
|
||||
libbot[speed,pycord,cache]==4.5.0
|
||||
mongodb-migrations==1.3.1
|
||||
pymemcache~=4.0.0
|
||||
redis~=5.2.1
|
||||
ujson~=5.10.0
|
||||
pymemcache>=4.0.0,<5.0.0
|
||||
redis>=7.0.0,<8.0.0
|
||||
ujson>=5.0.0,<6.0.0
|
||||
WaifuPicsPython==0.2.0
|
||||
Reference in New Issue
Block a user