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:
@@ -11,6 +11,7 @@ env:
|
||||
CARGO_TERM_COLOR: always
|
||||
DATABASE_URL: postgres://postgres:postgres@postgres:5432/tg_dev_srv_bot
|
||||
DISCORD_TOKEN: testing
|
||||
SQLX_OFFLINE: true
|
||||
|
||||
jobs:
|
||||
test:
|
||||
@@ -40,6 +41,8 @@ jobs:
|
||||
|
||||
- name: Set up Rust
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
with:
|
||||
cache: false
|
||||
|
||||
- name: Run tests
|
||||
run: cargo test --verbose
|
||||
|
||||
+1
-2
@@ -1,4 +1,3 @@
|
||||
/target
|
||||
Cargo.lock
|
||||
.env
|
||||
.sqlx
|
||||
.env
|
||||
+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]
|
||||
name = "tg-dev-srv-bot"
|
||||
version = "0.0.1"
|
||||
version = "0.0.2"
|
||||
edition = "2024"
|
||||
|
||||
[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"]
|
||||
@@ -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 manage_admins;
|
||||
pub mod manage_auto_role;
|
||||
pub mod version;
|
||||
|
||||
pub use ping::ping;
|
||||
pub use calc::calc;
|
||||
pub use manage_admins::manage_admins;
|
||||
pub use manage_auto_role::manage_auto_role;
|
||||
pub use version::version;
|
||||
|
||||
+11
-1
@@ -1,14 +1,24 @@
|
||||
use crate::{Context, Error};
|
||||
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)
|
||||
#[poise::command(slash_command, prefix_command)]
|
||||
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();
|
||||
trace!("Saved command time in microseconds");
|
||||
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;
|
||||
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
|
||||
// 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(())
|
||||
}
|
||||
|
||||
@@ -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 poise::serenity_prelude as sere;
|
||||
use tracing::{info, warn, error, debug, trace};
|
||||
use tracing::{info, error, debug, trace};
|
||||
use tracing_subscriber::EnvFilter;
|
||||
pub mod commands;
|
||||
pub mod event_handler;
|
||||
@@ -72,7 +72,7 @@ async fn main() {
|
||||
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()
|
||||
})
|
||||
.setup(|ctx, _ready, framework| {
|
||||
|
||||
Reference in New Issue
Block a user