guild_icon -> events; also change guild name
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
use super::events;
|
||||||
use chrono::{Datelike, Duration, Local, TimeZone, Utc};
|
use chrono::{Datelike, Duration, Local, TimeZone, Utc};
|
||||||
use chrono_tz::Europe::Warsaw;
|
use chrono_tz::Europe::Warsaw;
|
||||||
use serenity::all::{Context, CreateAttachment, EditGuild, Guild, GuildId};
|
use serenity::all::{Context, CreateAttachment, EditGuild, Guild, GuildId};
|
||||||
@@ -6,7 +7,7 @@ use tracing::{error, info, warn};
|
|||||||
|
|
||||||
const MAIN_GUILD_ID: GuildId = GuildId::new(447075692664979466);
|
const MAIN_GUILD_ID: GuildId = GuildId::new(447075692664979466);
|
||||||
|
|
||||||
enum Event {
|
pub enum Event {
|
||||||
Normal,
|
Normal,
|
||||||
PolskaGórą,
|
PolskaGórą,
|
||||||
PrideMonth,
|
PrideMonth,
|
||||||
@@ -22,7 +23,7 @@ enum Event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Event {
|
impl Event {
|
||||||
fn icon(&self) -> &str {
|
pub fn icon(&self) -> &str {
|
||||||
use Event as E;
|
use Event as E;
|
||||||
match self {
|
match self {
|
||||||
E::PolskaGórą => "./assets/logo-x512-polish.png",
|
E::PolskaGórą => "./assets/logo-x512-polish.png",
|
||||||
@@ -31,9 +32,28 @@ impl Event {
|
|||||||
_ => "./assets/logo-x512.png",
|
_ => "./assets/logo-x512.png",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub fn guild_name(&self) -> String {
|
||||||
|
use Event as E;
|
||||||
|
match self {
|
||||||
|
E::PolskaGórą => "Gractwo 🇵🇱".into(),
|
||||||
|
E::PrideMonth => "Gractwo 🏳️🌈".into(),
|
||||||
|
E::ValentineDay => "Gractwo 💗".into(),
|
||||||
|
E::Rogaliki => "Rogalictwo 🥐".into(),
|
||||||
|
E::Halloween => "Spooky Gractwo 🎃".into(),
|
||||||
|
E::Christmas => "Jolly Gractwo 🎄🎁☃️".into(),
|
||||||
|
E::NewYears => "New Gractwo, New Me 🎉".into(),
|
||||||
|
E::AnniversaryTF2 => "Polscy Gracze Team Fortress".into(),
|
||||||
|
E::AnniversaryGractwo => {
|
||||||
|
// TODO: this will conjugate badly in 17 years
|
||||||
|
let xlecie = Utc::now().year_ce().1 - 2020;
|
||||||
|
format!("{xlecie} lat Gractwa!")
|
||||||
|
}
|
||||||
|
_ => "Gractwo".into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_current_event() -> Event {
|
pub fn get_current_event() -> Event {
|
||||||
let today = Local::now();
|
let today = Local::now();
|
||||||
let (month, day) = (today.month(), today.day());
|
let (month, day) = (today.month(), today.day());
|
||||||
|
|
||||||
@@ -58,26 +78,26 @@ fn get_current_event() -> Event {
|
|||||||
|
|
||||||
pub fn init_service(ctx: &Context, guild_id: &GuildId) {
|
pub fn init_service(ctx: &Context, guild_id: &GuildId) {
|
||||||
let (ctx, guild_id) = (ctx.clone(), guild_id.clone());
|
let (ctx, guild_id) = (ctx.clone(), guild_id.clone());
|
||||||
info!("Initialising guild name/icon automation service...");
|
info!("Initialising event automation service...");
|
||||||
|
|
||||||
if guild_id != MAIN_GUILD_ID {
|
if guild_id != MAIN_GUILD_ID {
|
||||||
info!("Guild name/icon automation service not initialised; Bot not running on main guild.");
|
info!("Guild event automation service not initialised; Bot not running on main guild.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
run_icon_service(ctx, guild_id).await;
|
run_event_service(ctx, guild_id).await;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run_icon_service(ctx: Context, guild_id: GuildId) {
|
pub async fn run_event_service(ctx: Context, guild_id: GuildId) {
|
||||||
loop {
|
loop {
|
||||||
update_icon(&ctx, guild_id).await.ok();
|
update_guild(&ctx, guild_id).await.ok();
|
||||||
sleep_until_next_midnight().await;
|
sleep_until_next_midnight().await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn update_icon(ctx: &Context, guild_id: GuildId) -> Result<(), String> {
|
async fn update_guild(ctx: &Context, guild_id: GuildId) -> Result<(), String> {
|
||||||
let mut guild = match Guild::get(&ctx.http, guild_id).await {
|
let mut guild = match Guild::get(&ctx.http, guild_id).await {
|
||||||
Ok(g) => g,
|
Ok(g) => g,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
@@ -85,7 +105,7 @@ async fn update_icon(ctx: &Context, guild_id: GuildId) -> Result<(), String> {
|
|||||||
return Err("Could not get guild info: {e}".to_string());
|
return Err("Could not get guild info: {e}".to_string());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let event = get_current_event();
|
let event = events::get_current_event();
|
||||||
|
|
||||||
let icon = match CreateAttachment::path(event.icon()).await {
|
let icon = match CreateAttachment::path(event.icon()).await {
|
||||||
Ok(i) => i,
|
Ok(i) => i,
|
||||||
@@ -94,14 +114,18 @@ async fn update_icon(ctx: &Context, guild_id: GuildId) -> Result<(), String> {
|
|||||||
return Err("Could not create icon attachment: {e}".to_string());
|
return Err("Could not create icon attachment: {e}".to_string());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
match guild
|
match guild
|
||||||
.edit(&ctx.http, EditGuild::new().icon(Some(&icon)))
|
.edit(
|
||||||
|
&ctx.http,
|
||||||
|
EditGuild::new().name(event.guild_name()).icon(Some(&icon)),
|
||||||
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(_) => info!("Guild icon updated."),
|
Ok(_) => info!("Guild name/icon updated."),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
error!("Could not update guild icon...");
|
error!("Could not update guild name/icon...");
|
||||||
return Err("Could not update guild icon: {e}".to_string());
|
return Err("Could not update guild name/icon: {e}".to_string());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@ const GUILD_ID: &str = "DISCORD_SERVER_ID";
|
|||||||
struct Handler;
|
struct Handler;
|
||||||
|
|
||||||
mod commands;
|
mod commands;
|
||||||
mod guild_icon;
|
mod events;
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl EventHandler for Handler {
|
impl EventHandler for Handler {
|
||||||
@@ -33,7 +33,7 @@ impl EventHandler for Handler {
|
|||||||
Err(why) => info!("Failed to register commands on the guild: {why:?}"),
|
Err(why) => info!("Failed to register commands on the guild: {why:?}"),
|
||||||
};
|
};
|
||||||
|
|
||||||
guild_icon::init_service(&ctx, &guild_id);
|
events::init_service(&ctx, &guild_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn interaction_create(&self, ctx: Context, interaction: Interaction) {
|
async fn interaction_create(&self, ctx: Context, interaction: Interaction) {
|
||||||
|
|||||||
Reference in New Issue
Block a user