From 7bcf30fb3a1c81472e2f64cc473d4bfb61482e75 Mon Sep 17 00:00:00 2001 From: Brendan Golden Date: Sun, 8 Jun 2025 00:18:30 +0100 Subject: [PATCH] feat: can now set the server icon programmatically --- src/bin/update_server-icon.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/bin/update_server-icon.rs b/src/bin/update_server-icon.rs index bd2f295..56a6f0b 100644 --- a/src/bin/update_server-icon.rs +++ b/src/bin/update_server-icon.rs @@ -15,10 +15,13 @@ use std::process::Command; use chrono::{Datelike, Utc}; use gdk_pixbuf::{Pixbuf, PixbufFormat, PixbufLoader}; use gdk_pixbuf::prelude::PixbufLoaderExt; +use rand::rngs::SmallRng; +use rand::SeedableRng; use rand::seq::IndexedRandom; use resvg::usvg; use serde::Deserialize; use serenity::all::GuildId; +use serenity::builder::{CreateAttachment, EditGuild}; use tokio::sync::RwLock; use skynet_discord_bot::common::renderer::{Args, Renderer}; @@ -97,8 +100,10 @@ async fn update_icon_main(ctx: Arc) { // filter them so only the current season (if any) are active let logos_filtered = logos_filter(&festival_data, logos); - let mut rng = rand::rng(); + let mut rng = SmallRng::from_os_rng(); let logo_selected = logos_filtered.choose(&mut rng).unwrap(); + + logo_set(&ctx, &server, logo_selected).await; } struct FestivalData{ @@ -299,4 +304,12 @@ fn logos_filter(festival_data: &FestivalData, existing: Vec) -> Vec, server: &GuildId, logo_selected: &LogoData){ + let icon = CreateAttachment::path(logo_selected.path.to_str().unwrap_or_default()).await.unwrap(); + + // assuming a `guild` has already been bound + let builder = EditGuild::new().icon(Some(&icon)); + server.edit(ctx, builder).await.unwrap(); } \ No newline at end of file