Lyrics status

This commit is contained in:
2026-02-25 22:56:10 -03:00
parent 6aee4f39b0
commit 08c4534907
7 changed files with 392 additions and 137 deletions
+116 -106
View File
@@ -334,6 +334,8 @@ where
.resource_types(resource_types)
.build();
let (gateway_tx, mut gateway_rx) = tokio::sync::mpsc::unbounded_channel();
let runtime = Arc::new(Runtime {
http,
app,
@@ -342,6 +344,9 @@ where
prefixes: bot.prefixes.clone(),
commands: bot.commands.clone(),
cache,
gateway_tx,
shard_number: bot.shard.number(),
shard_total: bot.shard.total(),
});
for task in bot.tasks.clone() {
@@ -372,120 +377,125 @@ where
let mut gateway = Shard::with_config(bot.shard, config);
loop {
if let Some(Ok(event)) = gateway.next_event(EventTypeFlags::all()).await {
let task_rt = runtime.clone();
let task_bot = bot.clone();
tokio::select! {
Some(Ok(event)) = gateway.next_event(EventTypeFlags::all()) => {
let task_rt = runtime.clone();
let task_bot = bot.clone();
tokio::spawn(async move {
task_rt.cache.update(&event);
tokio::spawn(async move {
task_rt.cache.update(&event);
match event {
Event::Ready(event) => {
for handler in &task_bot.on_ready_handlers {
handler
.on_ready(&event, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on ready for {handler:?}! {e:?}")
)
.bye();
match event {
Event::Ready(event) => {
for handler in &task_bot.on_ready_handlers {
handler
.on_ready(&event, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on ready for {handler:?}! {e:?}")
)
.bye();
}
}
}
Event::GatewayReconnect => {
for handler in &task_bot.on_reconnect_handlers {
handler
.on_reconnect(task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on reconnect for {handler:?}! {e:?}")
)
.bye();
Event::GatewayReconnect => {
for handler in &task_bot.on_reconnect_handlers {
handler
.on_reconnect(task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on reconnect for {handler:?}! {e:?}")
)
.bye();
}
}
}
Event::InteractionCreate(interaction) => {
for handler in &task_bot.on_interaction_handlers {
handler
.on_interaction(&interaction, task_rt.clone(), task_bot.extras.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on interaction for {handler:?}! {e:?}")
)
.bye();
Event::InteractionCreate(interaction) => {
for handler in &task_bot.on_interaction_handlers {
handler
.on_interaction(&interaction, task_rt.clone(), task_bot.extras.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on interaction for {handler:?}! {e:?}")
)
.bye();
}
}
}
Event::MessageCreate(message) => {
for handler in &task_bot.on_message_handlers {
log::trace!("Running {handler:?}");
Event::MessageCreate(message) => {
for handler in &task_bot.on_message_handlers {
log::trace!("Running {handler:?}");
handler
.on_message(&message, task_rt.clone(), task_bot.extras.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on message for {handler:?}! {e:?}")
)
.bye();
handler
.on_message(&message, task_rt.clone(), task_bot.extras.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on message for {handler:?}! {e:?}")
)
.bye();
}
}
Event::MessageUpdate(message) => {
for handler in &task_bot.on_message_edit_handlers {
handler
.on_message_edit(&message, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on message edit for {handler:?}! {e:?}")
)
.bye();
}
}
Event::MessageDelete(message) => {
for handler in &task_bot.on_message_delete_handlers {
handler
.on_message_delete(&message, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on message delete for {handler:?}! {e:?}")
)
.bye();
}
}
Event::GuildCreate(guild) => {
for handler in &task_bot.on_server_create_handlers {
handler
.on_server_create(&guild, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on server create for {handler:?}! {e:?}")
)
.bye();
}
}
Event::GuildUpdate(guild) => {
for handler in &task_bot.on_server_update_handlers {
handler
.on_server_update(&guild, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on server update for {handler:?}! {e:?}")
)
.bye();
}
}
Event::GuildDelete(guild) => {
for handler in &task_bot.on_server_delete_handlers {
handler
.on_server_delete(&guild, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on server delete for {handler:?}! {e:?}")
)
.bye();
}
}
_ => {
log::trace!("Unhandled event {:?} received", event.kind());
}
}
Event::MessageUpdate(message) => {
for handler in &task_bot.on_message_edit_handlers {
handler
.on_message_edit(&message, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on message edit for {handler:?}! {e:?}")
)
.bye();
}
}
Event::MessageDelete(message) => {
for handler in &task_bot.on_message_delete_handlers {
handler
.on_message_delete(&message, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on message delete for {handler:?}! {e:?}")
)
.bye();
}
}
Event::GuildCreate(guild) => {
for handler in &task_bot.on_server_create_handlers {
handler
.on_server_create(&guild, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on server create for {handler:?}! {e:?}")
)
.bye();
}
}
Event::GuildUpdate(guild) => {
for handler in &task_bot.on_server_update_handlers {
handler
.on_server_update(&guild, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on server update for {handler:?}! {e:?}")
)
.bye();
}
}
Event::GuildDelete(guild) => {
for handler in &task_bot.on_server_delete_handlers {
handler
.on_server_delete(&guild, task_rt.clone())
.await
.inspect_err(
|e| log::error!("An error occurred while handling on server delete for {handler:?}! {e:?}")
)
.bye();
}
}
_ => {
log::trace!("Unhandled event {:?} received", event.kind());
}
}
});
});
}
Some(json) = gateway_rx.recv() => {
gateway.send(json)
}
}
}
}
+7
View File
@@ -19,6 +19,7 @@
use std::sync::Arc;
use tokio::sync::mpsc::UnboundedSender;
use twilight_cache_inmemory::InMemoryCache;
use twilight_http::Client;
use twilight_model::oauth::Application;
@@ -48,6 +49,12 @@ pub struct Runtime<T, E> {
pub state: Arc<T>,
pub cache: InMemoryCache,
/// Used to send messages through the gateway.
pub gateway_tx: UnboundedSender<String>,
pub shard_number: u32,
pub shard_total: u32,
}
impl<T, E> Runtime<T, E> {