use anyhow::{Context, Result}; use clap::Parser; use serde::Deserialize; use serenity::{ all::{ActivityData, ActivityType, GatewayIntents, OnlineStatus}, Client, }; use std::{fs, path::PathBuf}; #[derive(Debug, Deserialize)] struct Config { discord_token: String, } #[derive(Debug, Parser)] struct Args { config_path: PathBuf, } #[tokio::main] async fn main() -> Result<()> { let args = Args::parse(); let config_str = fs::read_to_string(&args.config_path) .with_context(|| format!("failed to read {}", args.config_path.display()))?; let config: Config = toml::from_str(&config_str) .with_context(|| format!("failed to parse {}", args.config_path.display()))?; drop(config_str); let mut client = Client::builder(&config.discord_token, GatewayIntents::default()) .activity(ActivityData { name: "(λx → x x)(λx → x x)".to_string(), kind: ActivityType::Custom, state: Some("pondering".to_string()), url: None, }) .status(OnlineStatus::Online) .await .context("failed to create Discord client")?; client .start() .await .context("failed to start Discord client")?; Ok(()) }