Public Access
Add version command, implement Docker support, make sqlx offline work
Run cargo test / Run tests (push) Failing after 3m2s
Run cargo test / Run tests (push) Failing after 3m2s
This commit is contained in:
1 parent
6f5d66a0bc
commit
b06bb882a8
24 files changed
+404
-5
No files matched your search
@@ -11,6 +11,7 @@ env:
|
|||||||
CARGO_TERM_COLOR: always
|
CARGO_TERM_COLOR: always
|
||||||
DATABASE_URL: postgres://postgres:postgres@postgres:5432/tg_dev_srv_bot
|
DATABASE_URL: postgres://postgres:postgres@postgres:5432/tg_dev_srv_bot
|
||||||
DISCORD_TOKEN: testing
|
DISCORD_TOKEN: testing
|
||||||
|
SQLX_OFFLINE: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
@@ -40,6 +41,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Set up Rust
|
- name: Set up Rust
|
||||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||||
|
with:
|
||||||
|
cache: false
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: cargo test --verbose
|
run: cargo test --verbose
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
/target
|
/target
|
||||||
Cargo.lock
|
Cargo.lock
|
||||||
.env
|
.env
|
||||||
.sqlx
|
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "SELECT enabled FROM auto_roles WHERE guild_id = $1 AND role_id = $2;",
|
||||||
|
"describe": {
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"ordinal": 0,
|
||||||
|
"name": "enabled",
|
||||||
|
"type_info": "Bool",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "auto_roles",
|
||||||
|
"name": "enabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8",
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "0c8f32cf64dc47758f2f8a46e94cc33baf557a366d1092b6c7cb507e3678e5d4"
|
||||||
|
}
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "SELECT role_id FROM auto_roles WHERE guild_id = $1",
|
||||||
|
"describe": {
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"ordinal": 0,
|
||||||
|
"name": "role_id",
|
||||||
|
"type_info": "Int8",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "auto_roles",
|
||||||
|
"name": "role_id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "38f5e0b163af3bcbf798b03a6806afd9edf1ab08c721a768aeffe6c0d6b31d4c"
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "INSERT INTO admin_users (guild_id, user_id) VALUES ($1, $2);",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8",
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "45366b9229d05e7807d8ffcc7c0ed7dd1b50f588d03c5dbaa24ea8a5f461b527"
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "INSERT INTO auto_roles (guild_id, role_id, enabled) VALUES ($1, $2, false) ON CONFLICT (guild_id) DO UPDATE SET role_id = $2;",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8",
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "46c3745dede4d63c3c3af709d254ddf70ca3d1086cccb5df401d66fd8c25bd0d"
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "INSERT INTO admin_roles (guild_id, role_id) VALUES ($1, $2);",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8",
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "49ed234a3f4bc1b1fa4536507240fd8ab8db848a6a8e099e47cd16062b28f24a"
|
||||||
|
}
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "SELECT role_id FROM admin_roles WHERE guild_id = $1;",
|
||||||
|
"describe": {
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"ordinal": 0,
|
||||||
|
"name": "role_id",
|
||||||
|
"type_info": "Int8",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "admin_roles",
|
||||||
|
"name": "role_id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "5acd90d552bf8c84510bdfaa924e546a0d22801cd655ebe78a11d0046974077a"
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "UPDATE auto_roles SET enabled = true WHERE guild_id = $1 AND role_id = $2;",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8",
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "5b795c3345490c840df662e7b196bd843b8672b719467d70aebf5e328fc552ef"
|
||||||
|
}
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "SELECT * FROM auto_roles WHERE guild_id = $1",
|
||||||
|
"describe": {
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"ordinal": 0,
|
||||||
|
"name": "guild_id",
|
||||||
|
"type_info": "Int8",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "auto_roles",
|
||||||
|
"name": "guild_id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ordinal": 1,
|
||||||
|
"name": "role_id",
|
||||||
|
"type_info": "Int8",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "auto_roles",
|
||||||
|
"name": "role_id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ordinal": 2,
|
||||||
|
"name": "enabled",
|
||||||
|
"type_info": "Bool",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "auto_roles",
|
||||||
|
"name": "enabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "92926fc1d382bfe17a5d59dee41869a0fb3e68cbbb6663cba45d31af473a2047"
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "DELETE FROM admin_roles WHERE guild_id = $1 AND role_id = $2;",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8",
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "bc03a95110e097a105d826771ccd48ba64ca89117d8c717170d969861e2e77a5"
|
||||||
|
}
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "SELECT role_id FROM auto_roles WHERE guild_id = $1 AND enabled = true",
|
||||||
|
"describe": {
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"ordinal": 0,
|
||||||
|
"name": "role_id",
|
||||||
|
"type_info": "Int8",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "auto_roles",
|
||||||
|
"name": "role_id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "c6f456f23b18ede825326b1c810ba34c1bc45c61e0d1a8b6f84d344727b4e659"
|
||||||
|
}
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "SELECT user_id FROM admin_users WHERE guild_id = $1;",
|
||||||
|
"describe": {
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"ordinal": 0,
|
||||||
|
"name": "user_id",
|
||||||
|
"type_info": "Int8",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "admin_users",
|
||||||
|
"name": "user_id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "d6b3a99d36ac18c2b566c510972008fcd400ebac195e46ffa1b4ae790486c59b"
|
||||||
|
}
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "SELECT role_id FROM admin_roles WHERE guild_id = $1",
|
||||||
|
"describe": {
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"ordinal": 0,
|
||||||
|
"name": "role_id",
|
||||||
|
"type_info": "Int8",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "admin_roles",
|
||||||
|
"name": "role_id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "dadde8070c69694e2b28f94bc0e09aa372adc28161996a66034f3d9d0f4cd2fa"
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "UPDATE auto_roles SET enabled = false WHERE guild_id = $1 AND role_id = $2;",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8",
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "e7dfaed40c69930178c568b4c38d0674d6d9329040f408e295f42ed2188acca5"
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"db_name": "PostgreSQL",
|
||||||
|
"query": "DELETE FROM admin_users WHERE guild_id = $1 AND user_id = $2;",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Left": [
|
||||||
|
"Int8",
|
||||||
|
"Int8"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "f16fb5cebae76c9cf8ce0a18ba0b3f01172d93f22df62715b01e769781a13b20"
|
||||||
|
}
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "tg-dev-srv-bot"
|
name = "tg-dev-srv-bot"
|
||||||
version = "0.0.1"
|
version = "0.0.2"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
FROM rust:latest AS builder
|
||||||
|
WORKDIR /usr/src/tg-dev-srv-bot
|
||||||
|
COPY . .
|
||||||
|
RUN SQLX_OFFLINE=true cargo install --path .
|
||||||
|
|
||||||
|
FROM debian:bullseye-slim
|
||||||
|
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
|
||||||
|
COPY --from=builder /usr/local/cargo/bin/tg-dev-srv-bot /usr/local/bin/tg-dev-srv-bot
|
||||||
|
CMD ["tg-dev-srv-bot"]
|
||||||
File renamed without changes.
@@ -0,0 +1,34 @@
|
|||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:16-alpine
|
||||||
|
container_name: tg-dev-srv-bot-postgres
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: ${TG_BOT_POSTGRES_USER:-postgres}
|
||||||
|
POSTGRES_PASSWORD: ${TG_BOT_POSTGRES_PASSWORD:-postgres}
|
||||||
|
POSTGRES_DB: ${TG_BOT_POSTGRES_DB:-tg_dev_srv_bot}
|
||||||
|
ports:
|
||||||
|
- "5432:5432"
|
||||||
|
volumes:
|
||||||
|
- postgres_data:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER:-postgres} -d $${POSTGRES_DB:-tg_dev_srv_bot}" ]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
tg-dev-srv-bot:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: DOCKERFILE
|
||||||
|
container_name: tg-dev-srv-bot
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- postgres
|
||||||
|
environment:
|
||||||
|
TG_BOT_DISCORD_TOKEN: ${TG_BOT_DISCORD_TOKEN}
|
||||||
|
TG_BOT_DATABASE_URL: ${TG_BOT_DATABASE_URL}
|
||||||
|
TG_BOT_LOG: ${TG_BOT_LOG}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres_data:
|
||||||
|
driver: local
|
||||||
@@ -2,8 +2,10 @@ pub mod ping;
|
|||||||
pub mod calc;
|
pub mod calc;
|
||||||
pub mod manage_admins;
|
pub mod manage_admins;
|
||||||
pub mod manage_auto_role;
|
pub mod manage_auto_role;
|
||||||
|
pub mod version;
|
||||||
|
|
||||||
pub use ping::ping;
|
pub use ping::ping;
|
||||||
pub use calc::calc;
|
pub use calc::calc;
|
||||||
pub use manage_admins::manage_admins;
|
pub use manage_admins::manage_admins;
|
||||||
pub use manage_auto_role::manage_auto_role;
|
pub use manage_auto_role::manage_auto_role;
|
||||||
|
pub use version::version;
|
||||||
+11
-1
@@ -1,14 +1,24 @@
|
|||||||
use crate::{Context, Error};
|
use crate::{Context, Error};
|
||||||
use poise::serenity_prelude as sere;
|
use poise::serenity_prelude as sere;
|
||||||
|
use tracing::{trace, debug};
|
||||||
|
use crate::shared_functions::trace_message;
|
||||||
|
|
||||||
/// Get the bot's current ping (back and forth)
|
/// Get the bot's current ping (back and forth)
|
||||||
#[poise::command(slash_command, prefix_command)]
|
#[poise::command(slash_command, prefix_command)]
|
||||||
pub async fn ping(ctx: Context<'_>) -> Result<(), Error> {
|
pub async fn ping(ctx: Context<'_>) -> Result<(), Error> {
|
||||||
|
trace!("ping command called by user {} in guild {}", ctx.author().id.get(), ctx.guild_id().unwrap().get());
|
||||||
|
trace!("Calculating ping");
|
||||||
let command_time_in_microseconds = ctx.created_at().timestamp_micros();
|
let command_time_in_microseconds = ctx.created_at().timestamp_micros();
|
||||||
|
trace!("Saved command time in microseconds");
|
||||||
let current_time_in_microseconds = sere::Timestamp::now().timestamp_micros();
|
let current_time_in_microseconds = sere::Timestamp::now().timestamp_micros();
|
||||||
|
trace!("Saved current time in microseconds");
|
||||||
let ping = (current_time_in_microseconds - command_time_in_microseconds) / 500;
|
let ping = (current_time_in_microseconds - command_time_in_microseconds) / 500;
|
||||||
|
trace!("Calculated ping: {}", ping);
|
||||||
// We divide by 1000 since we get the time in microseconds, and then multiply by 2 to get the roundtrip time
|
// We divide by 1000 since we get the time in microseconds, and then multiply by 2 to get the roundtrip time
|
||||||
// This is arguably not the best way to calculate ping, since it assumes perfect clock accuracy, but I'm lazy
|
// This is arguably not the best way to calculate ping, since it assumes perfect clock accuracy, but I'm lazy
|
||||||
ctx.say(format!("Current ping: {} ms", ping)).await?;
|
let msg = format!("Current ping: {} ms", ping);
|
||||||
|
trace_message(msg.clone(), ctx.channel_id().to_string(), ctx.guild_id().unwrap().to_string()).await;
|
||||||
|
ctx.say(msg).await?;
|
||||||
|
debug!("Ping command performed for user {} with ping {}", ctx.author().name, ping);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
use crate::{Context, Error};
|
||||||
|
use tracing::{trace, debug};
|
||||||
|
use crate::shared_functions::trace_message;
|
||||||
|
|
||||||
|
/// Get the bot's current version
|
||||||
|
#[poise::command(slash_command, prefix_command)]
|
||||||
|
pub async fn version(ctx: Context<'_>) -> Result<(), Error> {
|
||||||
|
trace!("version command called by user {} in guild {}", ctx.author().id.get(), ctx.guild_id().unwrap().get());
|
||||||
|
trace!("Loading version from environment");
|
||||||
|
let version = std::env::var("CARGO_PKG_VERSION").unwrap_or_else(|_| "Unknown".to_string());
|
||||||
|
let msg = format!("Current version: {}", version);
|
||||||
|
trace_message(msg.clone(), ctx.channel_id().to_string(), ctx.guild_id().unwrap().to_string()).await;
|
||||||
|
ctx.say(msg).await?;
|
||||||
|
debug!("Version command performed for user {} with version {}", ctx.author().name, version);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
use std::env;
|
use std::env;
|
||||||
use poise::serenity_prelude as sere;
|
use poise::serenity_prelude as sere;
|
||||||
use tracing::{info, warn, error, debug, trace};
|
use tracing::{info, error, debug, trace};
|
||||||
use tracing_subscriber::EnvFilter;
|
use tracing_subscriber::EnvFilter;
|
||||||
pub mod commands;
|
pub mod commands;
|
||||||
pub mod event_handler;
|
pub mod event_handler;
|
||||||
@@ -72,7 +72,7 @@ async fn main() {
|
|||||||
event_handler: |ctx, event, framework, user_data| {
|
event_handler: |ctx, event, framework, user_data| {
|
||||||
Box::pin(event_handler::event_handler(ctx, event, framework, user_data))
|
Box::pin(event_handler::event_handler(ctx, event, framework, user_data))
|
||||||
},
|
},
|
||||||
commands: vec![commands::ping(), commands::calc(), commands::manage_admins(), commands::manage_auto_role()],
|
commands: vec![commands::ping(), commands::calc(), commands::manage_admins(), commands::manage_auto_role(), commands::version()],
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.setup(|ctx, _ready, framework| {
|
.setup(|ctx, _ready, framework| {
|
||||||
|
|||||||
Reference in new issue
Block a user