feat: initial bot setup
This commit is contained in:
parent
ea5a1aaa20
commit
eb32d58341
@ -0,0 +1 @@
|
||||
DISCORD_TOKEN=changeme
|
2617
Cargo.lock
generated
2617
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -4,3 +4,9 @@ version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
color-eyre = "0.6.5"
|
||||
dotenvy = "0.15.7"
|
||||
poise = "0.6.1"
|
||||
tokio = { version = "1.47.1", features = ["macros", "rt-multi-thread"] }
|
||||
tracing = "0.1.41"
|
||||
tracing-subscriber = "0.3.20"
|
||||
|
96
flake.lock
generated
Normal file
96
flake.lock
generated
Normal file
@ -0,0 +1,96 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1756542300,
|
||||
"narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "d7600c775f877cd87b4f5a831c28aa94137377aa",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1744536153,
|
||||
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"rust-overlay": "rust-overlay"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1756780571,
|
||||
"narHash": "sha256-xX0B7Sgx3OQvf6anaNW0vXyYDXbchSx2mnT8rqAPbWA=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "2c18db2acc837a71146ed2d6dae27bf03e3b7a4b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
35
src/discord/mod.rs
Normal file
35
src/discord/mod.rs
Normal file
@ -0,0 +1,35 @@
|
||||
use color_eyre::eyre::{Error, Result};
|
||||
use poise::serenity_prelude::{self as serenity, FullEvent};
|
||||
use tracing::info;
|
||||
|
||||
fn event_handler(_ctx: serenity::Context, event: &FullEvent) {
|
||||
if let FullEvent::Ready { data_about_bot } = event {
|
||||
info!("Logged in as {}", data_about_bot.user.name);
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn make_bot() -> Result<serenity::Client> {
|
||||
let token = std::env::var("DISCORD_TOKEN").expect("DISCORD_TOKEN environment variable is missing");
|
||||
let intents = serenity::GatewayIntents::non_privileged();
|
||||
let framework = poise::Framework::<(), Error>::builder()
|
||||
.options(poise::FrameworkOptions {
|
||||
commands: vec![],
|
||||
event_handler: |ctx, event, _framework: poise::FrameworkContext<'_, (), _>, _data| {
|
||||
Box::pin(async move {
|
||||
event_handler(ctx.clone(), event);
|
||||
Ok(())
|
||||
})
|
||||
},
|
||||
..Default::default()
|
||||
})
|
||||
.setup(|ctx, _ready, framework| {
|
||||
Box::pin(async move {
|
||||
poise::builtins::register_globally(ctx, &framework.options().commands).await?;
|
||||
Ok(())
|
||||
})
|
||||
})
|
||||
.build();
|
||||
Ok(serenity::ClientBuilder::new(token, intents)
|
||||
.framework(framework)
|
||||
.await?)
|
||||
}
|
23
src/main.rs
23
src/main.rs
@ -1,3 +1,22 @@
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
#![deny(clippy::all, clippy::pedantic, clippy::nursery)]
|
||||
#![warn(missing_docs)]
|
||||
#![allow(clippy::module_name_repetitions, clippy::redundant_pub_crate)]
|
||||
|
||||
mod discord;
|
||||
mod utils;
|
||||
|
||||
use poise::serenity_prelude::{self as serenity};
|
||||
use tracing::info;
|
||||
use color_eyre::Result;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
utils::setup_logging();
|
||||
info!("Setting up color_eyre...");
|
||||
color_eyre::install()?;
|
||||
info!("Reading dotenv...");
|
||||
let _ = dotenvy::dotenv().map_err(|_| info!("No dotenv file found, skipping."));
|
||||
let mut bot = discord::make_bot().await?;
|
||||
bot.start().await?;
|
||||
Ok(())
|
||||
}
|
||||
|
7
src/utils.rs
Normal file
7
src/utils.rs
Normal file
@ -0,0 +1,7 @@
|
||||
use tracing::Level;
|
||||
use tracing_subscriber::FmtSubscriber;
|
||||
|
||||
pub fn setup_logging() {
|
||||
let subscriber = FmtSubscriber::builder().with_max_level(Level::INFO).finish();
|
||||
tracing::subscriber::set_global_default(subscriber).expect("Setting default logging subscriber failed");
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user