Config rework & implementation of greeting + giving role to participant

This commit is contained in:
AmokDev 2025-03-16 13:46:20 +03:00
parent be7797bce1
commit ae8d56e3f8
4 changed files with 32 additions and 16 deletions

View file

@ -1 +1,3 @@
BOT_TOKEN=YOUR-BOT-TOKEN
MEMBER_ROLE_ID=123
WELCOME_CHANNEL_ID=321

View file

@ -8,4 +8,6 @@ serenity = "0.12"
tokio = { version = "1.21.2", features = ["macros", "rt-multi-thread"] }
tracing = "0.1.23"
tracing-subscriber = "0.3"
envy = "0.4"
serde = { version = "1.0", features = ["derive"] }
dotenv = "0.15"

View file

@ -1,3 +1,8 @@
use serde::Deserialize;
#[derive(Deserialize, Debug)]
pub struct Config {
pub bot_token: String,
pub member_role_id: u64,
pub welcome_channel_id: u64,
}

View file

@ -1,12 +1,12 @@
mod commands;
use dotenv::dotenv;
use std::env;
use serenity::async_trait;
use serenity::builder::{CreateInteractionResponse, CreateInteractionResponseMessage};
use serenity::model::application::Interaction;
use serenity::model::gateway::Ready;
use serenity::model::guild::Member;
use serenity::model::id::ChannelId;
use serenity::model::channel::Message;
use serenity::model::user::OnlineStatus;
use serenity::gateway::ActivityData;
@ -16,7 +16,9 @@ use tracing::{warn, error, info};
mod config;
use config::Config;
struct Handler;
struct Handler {
config: Config
}
#[async_trait]
impl EventHandler for Handler {
@ -79,6 +81,16 @@ impl EventHandler for Handler {
);
}
async fn guild_member_addition(&self, ctx: Context, new_member: Member) {
if let Err(why) = new_member.add_role(&ctx.http, self.config.member_role_id).await {
error!("Error adding role: {why:?}");
}
let channel = ChannelId::new(self.config.welcome_channel_id);
if let Err(why) = channel.say(ctx.http, format!("Hello, {}!", new_member.user.name)).await {
error!("Error sending message: {why:?}");
}
}
}
#[tokio::main]
@ -87,23 +99,18 @@ async fn main() {
dotenv().ok();
let bot_token = env::var("BOT_TOKEN")
.expect("BOT_TOKEN не найден")
.parse()
.expect("Неверный формат BOT_TOKEN");
let config = Config {
bot_token: bot_token,
let config = match envy::from_env::<Config>() {
Ok(config) => config,
Err(error) => panic!("{:#?}", error)
};
let intents = GatewayIntents::GUILD_MESSAGES
| GatewayIntents::DIRECT_MESSAGES
| GatewayIntents::MESSAGE_CONTENT;
| GatewayIntents::MESSAGE_CONTENT
| GatewayIntents::GUILD_MEMBERS;
let token = &config.bot_token;
let mut client = Client::builder(token, intents)
.event_handler(Handler)
let mut client = Client::builder(&config.bot_token, intents)
.event_handler(Handler { config })
.await
.expect("Error creating client");