fix: send error replies as ephemeral (#71)

Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
This commit is contained in:
Ushie 2023-07-06 23:17:14 +03:00 committed by GitHub
parent 770f61f502
commit cc83a390df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 101 additions and 79 deletions

2
Cargo.lock generated
View File

@ -1347,7 +1347,7 @@ dependencies = [
[[package]] [[package]]
name = "revanced-discord-bot" name = "revanced-discord-bot"
version = "2.5.0" version = "2.5.1"
dependencies = [ dependencies = [
"base64 0.21.2", "base64 0.21.2",
"bson", "bson",

View File

@ -5,7 +5,7 @@ homepage = "https://revanced.app"
license = "GPL-3.0" license = "GPL-3.0"
name = "revanced-discord-bot" name = "revanced-discord-bot"
repository = "https://github.com/revanced/revanced-discord-bot" repository = "https://github.com/revanced/revanced-discord-bot"
version = "2.5.0" version = "2.5.1"
edition = "2021" edition = "2021"
[profile.release] [profile.release]

View File

@ -1,5 +1,5 @@
use std::cmp; use std::cmp;
use std::sync::Arc; use std::sync::{Arc, RwLock};
use mongodb::options::FindOptions; use mongodb::options::FindOptions;
use poise::serenity_prelude::{ChannelId, GuildChannel, GuildId, Mentionable, User, UserId}; use poise::serenity_prelude::{ChannelId, GuildChannel, GuildId, Mentionable, User, UserId};
@ -123,6 +123,8 @@ pub async fn respond_moderation<'a>(
) -> Result<(), Error> { ) -> Result<(), Error> {
let current_user = ctx.serenity_context().http.get_current_user().await?; let current_user = ctx.serenity_context().http.get_current_user().await?;
let send_ephemeral = RwLock::new(false);
let create_embed = |f: &mut serenity::CreateEmbed| { let create_embed = |f: &mut serenity::CreateEmbed| {
let mut moderated_user: Option<&User> = None; let mut moderated_user: Option<&User> = None;
@ -131,18 +133,21 @@ pub async fn respond_moderation<'a>(
moderated_user = Some(user); moderated_user = Some(user);
let embed = match error { let embed = match error {
Some(err) => f Some(err) => {
.title(format!("Failed to mute {}", user.tag())) *send_ephemeral.write().unwrap() = true;
.field("Exception", err.to_string(), false)
.field( f.title(format!("Failed to mute {}", user.tag()))
"Action", .field("Exception", err.to_string(), false)
format!( .field(
"{} was muted by {} but failed", "Action",
user.mention(), format!(
author.mention() "{} was muted by {} but failed",
), user.mention(),
false, author.mention()
), ),
false,
)
},
None => f.title(format!("Muted {}", user.tag())).field( None => f.title(format!("Muted {}", user.tag())).field(
"Action", "Action",
format!("{} was muted by {}", user.mention(), author.mention()), format!("{} was muted by {}", user.mention(), author.mention()),
@ -160,18 +165,21 @@ pub async fn respond_moderation<'a>(
ModerationKind::Unmute(user, author, error) => { ModerationKind::Unmute(user, author, error) => {
moderated_user = Some(user); moderated_user = Some(user);
match error { match error {
Some(err) => f Some(err) => {
.title(format!("Failed to unmute {}", user.tag())) *send_ephemeral.write().unwrap() = true;
.field("Exception", err.to_string(), false)
.field( f.title(format!("Failed to unmute {}", user.tag()))
"Action", .field("Exception", err.to_string(), false)
format!( .field(
"{} was unmuted by {} but failed", "Action",
user.mention(), format!(
author.mention() "{} was unmuted by {} but failed",
), user.mention(),
false, author.mention()
), ),
false,
)
},
None => f.title(format!("Unmuted {}", user.tag())).field( None => f.title(format!("Unmuted {}", user.tag())).field(
"Action", "Action",
format!("{} was unmuted by {}", user.mention(), author.mention()), format!("{} was unmuted by {}", user.mention(), author.mention()),
@ -182,18 +190,21 @@ pub async fn respond_moderation<'a>(
ModerationKind::Ban(user, author, reason, error) => { ModerationKind::Ban(user, author, reason, error) => {
moderated_user = Some(user); moderated_user = Some(user);
let f = match error { let f = match error {
Some(err) => f Some(err) => {
.title(format!("Failed to ban {}", user.tag())) *send_ephemeral.write().unwrap() = true;
.field("Exception", err.to_string(), false)
.field( f.title(format!("Failed to ban {}", user.tag()))
"Action", .field("Exception", err.to_string(), false)
format!( .field(
"{} was banned by {} but failed", "Action",
user.mention(), format!(
author.mention() "{} was banned by {} but failed",
), user.mention(),
false, author.mention()
), ),
false,
)
},
None => f.title(format!("Banned {}", user.tag())).field( None => f.title(format!("Banned {}", user.tag())).field(
"Action", "Action",
format!("{} was banned by {}", user.mention(), author.mention()), format!("{} was banned by {}", user.mention(), author.mention()),
@ -209,18 +220,21 @@ pub async fn respond_moderation<'a>(
ModerationKind::Unban(user, author, error) => { ModerationKind::Unban(user, author, error) => {
moderated_user = Some(user); moderated_user = Some(user);
match error { match error {
Some(err) => f Some(err) => {
.title(format!("Failed to unban {}", user.tag())) *send_ephemeral.write().unwrap() = true;
.field("Exception", err.to_string(), false)
.field( f.title(format!("Failed to unban {}", user.tag()))
"Action", .field("Exception", err.to_string(), false)
format!( .field(
"{} was unbanned by {} but failed", "Action",
user.mention(), format!(
author.mention() "{} was unbanned by {} but failed",
), user.mention(),
false, author.mention()
), ),
false,
)
},
None => f.title(format!("Unbanned {}", user.tag())).field( None => f.title(format!("Unbanned {}", user.tag())).field(
"Action", "Action",
format!("{} was unbanned by {}", user.mention(), author.mention()), format!("{} was unbanned by {}", user.mention(), author.mention()),
@ -229,18 +243,21 @@ pub async fn respond_moderation<'a>(
} }
}, },
ModerationKind::Lock(channel, author, error) => match error { ModerationKind::Lock(channel, author, error) => match error {
Some(err) => f Some(err) => {
.title(format!("Failed to lock {} ", channel.name())) *send_ephemeral.write().unwrap() = true;
.field("Exception", err.to_string(), false)
.field( f.title(format!("Failed to lock {} ", channel.name()))
"Action", .field("Exception", err.to_string(), false)
format!( .field(
"{} was locked by {} but failed", "Action",
channel.mention(), format!(
author.mention() "{} was locked by {} but failed",
), channel.mention(),
false, author.mention()
), ),
false,
)
},
None => f None => f
.title(format!("Locked {}", channel.name())) .title(format!("Locked {}", channel.name()))
.description( .description(
@ -253,18 +270,21 @@ pub async fn respond_moderation<'a>(
), ),
}, },
ModerationKind::Unlock(channel, author, error) => match error { ModerationKind::Unlock(channel, author, error) => match error {
Some(err) => f Some(err) => {
.title(format!("Failed to unlock {}", channel.name())) *send_ephemeral.write().unwrap() = true;
.field("Exception", err.to_string(), false)
.field( f.title(format!("Failed to unlock {}", channel.name()))
"Action", .field("Exception", err.to_string(), false)
format!( .field(
"{} was unlocked by {} but failed", "Action",
channel.mention(), format!(
author.mention() "{} was unlocked by {} but failed",
), channel.mention(),
false, author.mention()
), ),
false,
)
},
None => f None => f
.title(format!("Unlocked {}", channel.name())) .title(format!("Unlocked {}", channel.name()))
.description("Restored original permission overwrites.") .description("Restored original permission overwrites.")
@ -291,10 +311,12 @@ pub async fn respond_moderation<'a>(
let reply = ctx let reply = ctx
.send(|reply| { .send(|reply| {
reply.embed(|embed| { reply
create_embed(embed); .embed(|embed| {
embed create_embed(embed);
}) embed
})
.ephemeral(*send_ephemeral.read().unwrap())
}) })
.await?; .await?;