base
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
/target
|
||||
.env
|
||||
2564
Cargo.lock
generated
Normal file
2564
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -8,3 +8,12 @@ edition = "2024"
|
||||
publish = false
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.100"
|
||||
dotenvy = "0.15.7"
|
||||
poise = "0.6.1"
|
||||
serde = { version = "1.0.228", features = ["derive"] }
|
||||
serde_json = "1.0.145"
|
||||
serenity = "0.12.4"
|
||||
tokio = { version = "1.48.0", features = ["full"] }
|
||||
tracing = "0.1.43"
|
||||
tracing-subscriber = { version = "0.3.22", features = ["env-filter", "fmt"] }
|
||||
|
||||
2
example.env
Normal file
2
example.env
Normal file
@@ -0,0 +1,2 @@
|
||||
RUST_LOG="info" # Optional
|
||||
DISCORD_TOKEN=""
|
||||
0
src/commands/mod.rs
Normal file
0
src/commands/mod.rs
Normal file
22
src/listener.rs
Normal file
22
src/listener.rs
Normal file
@@ -0,0 +1,22 @@
|
||||
use serenity::{all::{ActivityData, Context, EventHandler, OnlineStatus, Ready}, async_trait};
|
||||
use tracing::info;
|
||||
|
||||
pub struct Handler;
|
||||
|
||||
#[async_trait]
|
||||
impl EventHandler for Handler {
|
||||
async fn ready(&self, context: Context, ready: Ready) {
|
||||
info!("{} ({}) is connected!", ready.user.tag(), ready.user.id);
|
||||
|
||||
let http = &context.http;
|
||||
let version = ready.version;
|
||||
let gateway = http.get_bot_gateway().await.unwrap();
|
||||
let total = gateway.session_start_limit.total;
|
||||
let remaining = gateway.session_start_limit.remaining;
|
||||
info!("Connected to the Discord API (version {version}) with {remaining}/{total} sessions remaining.");
|
||||
|
||||
let guilds_len = ready.guilds.len();
|
||||
info!("Connected to {} guilds", guilds_len);
|
||||
context.set_presence(Some(ActivityData::listening(format!("void"))), OnlineStatus::Idle);
|
||||
}
|
||||
}
|
||||
55
src/main.rs
55
src/main.rs
@@ -1,3 +1,54 @@
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
mod listener;
|
||||
mod commands;
|
||||
|
||||
use dotenvy::dotenv;
|
||||
use poise::{serenity_prelude as serenity, Framework, FrameworkOptions};
|
||||
use ::serenity::all::GatewayIntents;
|
||||
use std::env;
|
||||
|
||||
type Error = anyhow::Error;
|
||||
use tracing_subscriber::{FmtSubscriber, EnvFilter};
|
||||
type Context<'a> = poise::Context<'a, Data, Error>;
|
||||
|
||||
|
||||
struct Data {}
|
||||
|
||||
#[tokio::main()]
|
||||
async fn main() -> Result<(), Error> {
|
||||
dotenv().ok();
|
||||
|
||||
let subscriber = FmtSubscriber::builder()
|
||||
.with_env_filter(
|
||||
EnvFilter::try_from_default_env()
|
||||
.unwrap_or_else(|_| EnvFilter::new("info"))
|
||||
)
|
||||
.finish();
|
||||
|
||||
tracing::subscriber::set_global_default(subscriber)?;
|
||||
|
||||
let token = env::var("DISCORD_TOKEN")?;
|
||||
|
||||
let framework = Framework::builder()
|
||||
.options(FrameworkOptions::<Data, Error> {
|
||||
commands: vec![],
|
||||
..Default::default()
|
||||
})
|
||||
.setup(move |context, _ready, framework| {
|
||||
Box::pin(async move {
|
||||
poise::builtins::register_globally(context, &framework.options().commands).await?;
|
||||
Ok(Data {})
|
||||
})
|
||||
})
|
||||
.build();
|
||||
|
||||
let mut client = serenity::Client::builder(token, GatewayIntents::all())
|
||||
.event_handler(listener::Handler)
|
||||
.framework(framework)
|
||||
.await?;
|
||||
|
||||
if let Err(why) = client.start_autosharded().await {
|
||||
eprintln!("An error occurred while running the client: {why}");
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user