Add !bottleclip <icon> <ears> command

This commit is contained in:
polyfloyd 2025-05-05 22:37:08 +02:00
parent 07cab2d2d1
commit 581665fa95
3 changed files with 65 additions and 0 deletions

62
main.py
View file

@ -5,6 +5,7 @@ import os
import sys import sys
from time import sleep from time import sleep
import aiohttp
import aiomqtt import aiomqtt
import pytz import pytz
from discord import Intents from discord import Intents
@ -26,6 +27,11 @@ if not webhook_url:
print("DISCORD_WEBHOOK_URL unset") print("DISCORD_WEBHOOK_URL unset")
sys.exit(1) sys.exit(1)
bottleclip_git_token = os.getenv("BOTTLECLIP_GIT_TOKEN")
if not bottleclip_git_token:
print("BOTTLECLIP_GIT_TOKEN unset")
sys.exit(1)
timezone = pytz.timezone("Europe/Amsterdam") timezone = pytz.timezone("Europe/Amsterdam")
# Discord bot stuff # Discord bot stuff
@ -107,6 +113,62 @@ async def np(ctx):
await ctx.send("Now playing: Darude - Sandstorm") await ctx.send("Now playing: Darude - Sandstorm")
# !bottleclip
@HobbyBot.command(description="Generate a bottle-clip STL file suitable for printing")
async def bottleclip(ctx, icon: str, ears: bool = False):
git_api = "https://git.bitlair.nl/api/v1"
owner = "bitlair"
repo = "bottle-clip"
flow = "stl.yaml"
auth = {
"Authorization": f"Bearer {bottleclip_git_token}",
}
icons = {
"thing-logos/glider.dxf",
"thing-logos/Club_mate_logo.dxf",
"thing-logos/chaosknoten.dxf",
"thing-logos/camprocket.dxf",
"pixel-cats/laying-left.svg",
"pixel-cats/laying-right.svg",
"pixel-cats/sitting-left.svg",
"pixel-cats/sitting-right.svg",
"pixel-cats/spooked-left.svg",
"pixel-cats/spooked-right.svg",
"pixel-cats/standing-left.svg",
"pixel-cats/standing-right.svg",
}
if icon not in icons:
await ctx.reply(f"arg1 must be one of {', '.join(icons)}")
return
async with ctx.typing():
async with aiohttp.ClientSession() as sess:
dispatch_body = {
"inputs": {
"label": ctx.author.nick,
"icon": icon,
"ears": "true" if ears else "false",
},
"ref": "main",
"return_run_info": True,
}
async with sess.post(
f"{git_api}/repos/{owner}/{repo}/actions/workflows/{flow}/dispatches",
headers=auth,
json=dispatch_body,
) as response:
if response.status != 201:
await ctx.reply("Meh, stuk")
return
r = await response.json()
run_number = r["run_number"]
await ctx.reply(
f"https://git.bitlair.nl/bitlair/bottle-clip/actions/runs/{run_number}"
)
def webhook_message(msg): def webhook_message(msg):
webhook = DiscordWebhook(url=webhook_url, rate_limit_retry=True, content=msg) webhook = DiscordWebhook(url=webhook_url, rate_limit_retry=True, content=msg)
webhook.execute() webhook.execute()

View file

@ -5,6 +5,7 @@ description = "Bitlair Discord Bot"
readme = "README.md" readme = "README.md"
requires-python = ">=3.12" requires-python = ">=3.12"
dependencies = [ dependencies = [
"aiohttp>=3.11.18",
"aiomqtt>=2.4.0", "aiomqtt>=2.4.0",
"discord-py>=2.5.2", "discord-py>=2.5.2",
"discord-webhook>=1.4.1", "discord-webhook>=1.4.1",

2
uv.lock generated
View file

@ -186,6 +186,7 @@ name = "discord-bot"
version = "0.1.0" version = "0.1.0"
source = { virtual = "." } source = { virtual = "." }
dependencies = [ dependencies = [
{ name = "aiohttp" },
{ name = "aiomqtt" }, { name = "aiomqtt" },
{ name = "discord-py" }, { name = "discord-py" },
{ name = "discord-webhook" }, { name = "discord-webhook" },
@ -194,6 +195,7 @@ dependencies = [
[package.metadata] [package.metadata]
requires-dist = [ requires-dist = [
{ name = "aiohttp", specifier = ">=3.11.18" },
{ name = "aiomqtt", specifier = ">=2.4.0" }, { name = "aiomqtt", specifier = ">=2.4.0" },
{ name = "discord-py", specifier = ">=2.5.2" }, { name = "discord-py", specifier = ">=2.5.2" },
{ name = "discord-webhook", specifier = ">=1.4.1" }, { name = "discord-webhook", specifier = ">=1.4.1" },