Compare commits

...
10 Commits
Author SHA1 Message Date
nelsbrock b9522c761d upgrade dependencies
Rust / build (push) Has been cancelled
2024-05-26 13:22:22 +02:00
nelsbrock 57b41d8e63 update dependencies 2024-05-26 11:34:18 +02:00
nelsbrock 8a0527972f update dependencies 2023-10-04 16:02:14 +02:00
nelsbrock 1c0b36ae60 update dependencies 2023-09-15 20:05:07 +02:00
nelsbrock 194ebcb071 update dependencies 2023-08-26 20:53:20 +02:00
nelsbrock f9089bc9b7 update dependencies 2023-04-13 20:23:37 +02:00
nelsbrock cda2defde5 update Cargo.lock 2023-02-14 14:57:58 +01:00
nelsbrock f8094d2872 update env_logger 2023-01-07 13:48:50 +01:00
nelsbrock d3f2aeb220 replace chrono with time 2023-01-07 13:48:50 +01:00
nelsbrock 1333b1f02f update Cargo.lock 2023-01-07 13:28:21 +01:00
4 changed files with 799 additions and 489 deletions
Generated
+763 -459
View File
File diff suppressed because it is too large Load Diff
+7 -7
View File
@@ -7,13 +7,13 @@ edition = "2021"
[dependencies] [dependencies]
log = "0.4" log = "0.4"
env_logger = "0.9" env_logger = "0.11.3"
chrono = "0.4" time = "0.3.36"
itertools = "0.10" itertools = "0.13"
tokio = {version = "1.20", features = ["rt-multi-thread", "signal"]} tokio = {version = "1.37", features = ["rt-multi-thread", "signal"]}
dashmap = "5.3.4" dashmap = "5.5.3"
[dependencies.serenity] [dependencies.serenity]
version = "0.11" version = "0.12"
default-features = false default-features = false
features = ["builder", "cache", "client", "gateway", "http", "model", "utils", "rustls_backend"] features = ["builder", "cache", "client", "gateway", "http", "model", "utils", "rustls_backend"]
+1 -1
View File
@@ -40,7 +40,7 @@ async fn main() -> ExitCode {
.expect("error on waiting for shutdown signal"); .expect("error on waiting for shutdown signal");
debug!("Shutting down..."); debug!("Shutting down...");
shard_manager.lock().await.shutdown_all().await; shard_manager.shutdown_all().await;
}); });
match client.start().await { match client.start().await {
+28 -22
View File
@@ -1,17 +1,19 @@
use dashmap::DashMap; use dashmap::DashMap;
use itertools::Itertools; use itertools::Itertools;
use log::{debug, error, info}; use log::{debug, error, info};
use serenity::all::{ActivityData, CreateEmbed, CreateMessage};
use serenity::client::{Context, EventHandler}; use serenity::client::{Context, EventHandler};
use serenity::model::channel::Message; use serenity::model::channel::Message;
use serenity::model::colour::Colour;
use serenity::model::event::ResumedEvent; use serenity::model::event::ResumedEvent;
use serenity::model::gateway::{Activity, Ready}; use serenity::model::gateway::Ready;
use serenity::model::id::{ChannelId, UserId}; use serenity::model::id::{ChannelId, UserId};
use serenity::utils::Colour;
use std::cmp::Reverse; use std::cmp::Reverse;
use std::collections::HashMap; use std::collections::HashMap;
use std::fmt::Display; use std::fmt::Display;
use std::ops::RangeInclusive; use std::ops::RangeInclusive;
use std::time::Duration; use std::time::Duration;
use time::OffsetDateTime;
use tokio::sync::mpsc; use tokio::sync::mpsc;
const DEFAULT_CONTEST_DURATION: Duration = Duration::from_secs(60); const DEFAULT_CONTEST_DURATION: Duration = Duration::from_secs(60);
@@ -42,7 +44,7 @@ impl EventHandler for Handler {
"Counting message {} (from {} in channel {})", "Counting message {} (from {} in channel {})",
msg.id, msg.id,
msg.author.tag(), msg.author.tag(),
msg.channel_id.0 msg.channel_id.get()
); );
contest.value().send(msg).await.unwrap(); contest.value().send(msg).await.unwrap();
return; return;
@@ -61,7 +63,7 @@ impl EventHandler for Handler {
"User {} started a {} second contest in channel {}", "User {} started a {} second contest in channel {}",
msg.author.tag(), msg.author.tag(),
duration.as_secs(), duration.as_secs(),
msg.channel_id.0 msg.channel_id.get()
); );
match run_contest( match run_contest(
@@ -75,12 +77,13 @@ impl EventHandler for Handler {
{ {
Ok(contest) => debug!( Ok(contest) => debug!(
"Contest in channel {} has ended with {} participant(s)", "Contest in channel {} has ended with {} participant(s)",
msg.channel_id.0, msg.channel_id.get(),
contest.counts.len() contest.counts.len()
), ),
Err(err) => error!( Err(err) => error!(
"Error while running contest in channel {}: {}", "Error while running contest in channel {}: {}",
msg.channel_id.0, err msg.channel_id.get(),
err
), ),
}; };
} }
@@ -88,7 +91,7 @@ impl EventHandler for Handler {
async fn ready(&self, ctx: Context, ready: Ready) { async fn ready(&self, ctx: Context, ready: Ready) {
info!("Connected as {}", ready.user.tag()); info!("Connected as {}", ready.user.tag());
ctx.set_activity(Activity::listening("Spam")).await; ctx.set_activity(Some(ActivityData::listening("Spam")));
} }
async fn resume(&self, _ctx: Context, _: ResumedEvent) { async fn resume(&self, _ctx: Context, _: ResumedEvent) {
@@ -143,7 +146,7 @@ impl Contest {
let mut result = String::new(); let mut result = String::new();
let mut cur_rank_num = 1; let mut cur_rank_num = 1;
for (_, rank_group) in &ranking.into_iter().group_by(|elt| fk((*elt).1)) { for (_, rank_group) in &ranking.into_iter().chunk_by(|elt| fk((elt).1)) {
let mut group_size = 0; let mut group_size = 0;
for (userid, count) in rank_group { for (userid, count) in rank_group {
result.push_str( result.push_str(
@@ -164,20 +167,21 @@ async fn run_contest(
contests: &Contests, contests: &Contests,
pin: bool, pin: bool,
) -> serenity::Result<Contest> { ) -> serenity::Result<Contest> {
let end_timestamp = let end_timestamp = (OffsetDateTime::now_utc() + duration).unix_timestamp();
(chrono::Utc::now() + chrono::Duration::from_std(duration).unwrap()).timestamp() + 1;
// send announcement message // send announcement message
let announcement = channel_id let announcement = channel_id
.send_message(&ctx.http, |m| { .send_message(
m.embed(|e| { &ctx.http,
e.title("Es wurde ein Spam-Wettbewerb gestartet!") CreateMessage::new().add_embed(
CreateEmbed::new()
.title("Es wurde ein Spam-Wettbewerb gestartet!")
.description(format!( .description(format!(
"Wer am meisten spamt, gewinnt.\nEnde <t:{end_timestamp}:R>.", "Wer am meisten spamt, gewinnt.\nEnde <t:{end_timestamp}:R>.",
)) ))
.colour(Colour::BLUE) .colour(Colour::BLUE),
}) ),
}) )
.await?; .await?;
if pin { if pin {
@@ -211,9 +215,11 @@ async fn run_contest(
// send ranking message // send ranking message
channel_id channel_id
.send_message(&ctx.http, |m| { .send_message(
m.embed(|e| { &ctx.http,
e.title("Der Wettbewerb ist beendet!") CreateMessage::new().add_embed(
CreateEmbed::new()
.title("Der Wettbewerb ist beendet!")
.colour(Colour::DARK_GREEN) .colour(Colour::DARK_GREEN)
.field( .field(
"Ergebnisse (nach Nachrichten):", "Ergebnisse (nach Nachrichten):",
@@ -224,9 +230,9 @@ async fn run_contest(
"Ergebnisse (nach Zeichen):", "Ergebnisse (nach Zeichen):",
counts.ranking_by(|c| Reverse(c.characters), |c| c.characters), counts.ranking_by(|c| Reverse(c.characters), |c| c.characters),
false, false,
) ),
}) ),
}) )
.await?; .await?;
} }