1
0
Fork 1
mirror of https://github.com/TeamOctolings/Octobot.git synced 2025-04-20 00:43:36 +03:00

Send direct messages to banned/kicked users explaining what happened

Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
This commit is contained in:
Octol1ttle 2023-06-30 22:55:04 +05:00
parent e53bf8a374
commit b7057d3447
Signed by: Octol1ttle
GPG key ID: B77C34313AEE1FFF
7 changed files with 855 additions and 1225 deletions

View file

@ -107,6 +107,32 @@ public class BanCommandGroup : CommandGroup {
if (!userResult.IsDefined(out var user)) if (!userResult.IsDefined(out var user))
return Result.FromError(userResult); return Result.FromError(userResult);
var builder = new StringBuilder().AppendLine(string.Format(Messages.DescriptionActionReason, reason));
if (duration is not null)
builder.Append(
string.Format(
Messages.DescriptionActionExpiresAt,
Markdown.Timestamp(DateTimeOffset.UtcNow.Add(duration.Value))));
var dmChannelResult = await _userApi.CreateDMAsync(target.ID, CancellationToken);
if (dmChannelResult.IsDefined(out var dmChannel)) {
var guildResult = await _guildApi.GetGuildAsync(guildId.Value, ct: CancellationToken);
if (!guildResult.IsDefined(out var guild))
return Result.FromError(guildResult);
var dmEmbed = new EmbedBuilder().WithGuildTitle(guild)
.WithTitle(Messages.YouWereBanned)
.WithDescription(builder.ToString())
.WithActionFooter(user)
.WithCurrentTimestamp()
.WithColour(ColorsList.Red)
.Build();
if (!dmEmbed.IsDefined(out var dmBuilt))
return Result.FromError(dmEmbed);
await _channelApi.CreateMessageAsync(dmChannel.ID, embeds: new[] { dmBuilt });
}
var banResult = await _guildApi.CreateGuildBanAsync( var banResult = await _guildApi.CreateGuildBanAsync(
guildId.Value, target.ID, reason: $"({user.GetTag()}) {reason}".EncodeHeader(), guildId.Value, target.ID, reason: $"({user.GetTag()}) {reason}".EncodeHeader(),
ct: CancellationToken); ct: CancellationToken);
@ -122,12 +148,6 @@ public class BanCommandGroup : CommandGroup {
if ((cfg.PublicFeedbackChannel is not 0 && cfg.PublicFeedbackChannel != channelId.Value) if ((cfg.PublicFeedbackChannel is not 0 && cfg.PublicFeedbackChannel != channelId.Value)
|| (cfg.PrivateFeedbackChannel is not 0 && cfg.PrivateFeedbackChannel != channelId.Value)) { || (cfg.PrivateFeedbackChannel is not 0 && cfg.PrivateFeedbackChannel != channelId.Value)) {
var builder = new StringBuilder().AppendLine(string.Format(Messages.DescriptionActionReason, reason));
if (duration is not null)
builder.Append(
string.Format(
Messages.DescriptionActionExpiresAt, Markdown.Timestamp(memberData.BannedUntil.Value)));
var logEmbed = new EmbedBuilder().WithSmallTitle( var logEmbed = new EmbedBuilder().WithSmallTitle(
string.Format(Messages.UserBanned, target.GetTag()), target) string.Format(Messages.UserBanned, target.GetTag()), target)
.WithDescription(builder.ToString()) .WithDescription(builder.ToString())

View file

@ -97,6 +97,25 @@ public class KickCommandGroup : CommandGroup {
if (!userResult.IsDefined(out var user)) if (!userResult.IsDefined(out var user))
return Result.FromError(userResult); return Result.FromError(userResult);
var dmChannelResult = await _userApi.CreateDMAsync(target.ID, CancellationToken);
if (dmChannelResult.IsDefined(out var dmChannel)) {
var guildResult = await _guildApi.GetGuildAsync(guildId.Value, ct: CancellationToken);
if (!guildResult.IsDefined(out var guild))
return Result.FromError(guildResult);
var dmEmbed = new EmbedBuilder().WithGuildTitle(guild)
.WithTitle(Messages.YouWereKicked)
.WithDescription(string.Format(Messages.DescriptionActionReason, reason))
.WithActionFooter(user)
.WithCurrentTimestamp()
.WithColour(ColorsList.Red)
.Build();
if (!dmEmbed.IsDefined(out var dmBuilt))
return Result.FromError(dmEmbed);
await _channelApi.CreateMessageAsync(dmChannel.ID, embeds: new[] { dmBuilt });
}
var kickResult = await _guildApi.RemoveGuildMemberAsync( var kickResult = await _guildApi.RemoveGuildMemberAsync(
guildId.Value, target.ID, $"({user.GetTag()}) {reason}".EncodeHeader(), guildId.Value, target.ID, $"({user.GetTag()}) {reason}".EncodeHeader(),
ct: CancellationToken); ct: CancellationToken);

View file

@ -83,6 +83,22 @@ public static class Extensions {
return builder.WithFooter(new EmbedFooter(guild.Name, iconUrl)); return builder.WithFooter(new EmbedFooter(guild.Name, iconUrl));
} }
/// <summary>
/// Adds a title representing that the action happened in the <paramref name="guild" />.
/// </summary>
/// <param name="builder">The builder to add the title to.</param>
/// <param name="guild">The guild whose name and icon to use.</param>
/// <returns>The builder with the added title.</returns>
public static EmbedBuilder WithGuildTitle(this EmbedBuilder builder, IGuild guild) {
var iconUrlResult = CDN.GetGuildIconUrl(guild, imageSize: 256);
var iconUrl = iconUrlResult.IsSuccess
? iconUrlResult.Entity.AbsoluteUri
: null;
builder.Author = new EmbedAuthorBuilder(guild.Name, iconUrl: iconUrl);
return builder;
}
/// <summary> /// <summary>
/// Adds a scheduled event's cover image. /// Adds a scheduled event's cover image.
/// </summary> /// </summary>

1985
Messages.Designer.cs generated

File diff suppressed because it is too large Load diff

View file

@ -136,7 +136,7 @@
<value>You do not have permission to execute this command!</value> <value>You do not have permission to execute this command!</value>
</data> </data>
<data name="YouWereBanned" xml:space="preserve"> <data name="YouWereBanned" xml:space="preserve">
<value>You were banned by {0} in guild `{1}` for {2}</value> <value>You were banned</value>
</data> </data>
<data name="PunishmentExpired" xml:space="preserve"> <data name="PunishmentExpired" xml:space="preserve">
<value>Punishment expired</value> <value>Punishment expired</value>
@ -151,7 +151,7 @@
<value>Command help:</value> <value>Command help:</value>
</data> </data>
<data name="YouWereKicked" xml:space="preserve"> <data name="YouWereKicked" xml:space="preserve">
<value>You were kicked by {0} in guild `{1}` for {2}</value> <value>You were kicked</value>
</data> </data>
<data name="Milliseconds" xml:space="preserve"> <data name="Milliseconds" xml:space="preserve">
<value>ms</value> <value>ms</value>

View file

@ -134,9 +134,6 @@
</data> </data>
<data name="CommandNoPermissionUser" xml:space="preserve"> <data name="CommandNoPermissionUser" xml:space="preserve">
<value>У тебя недостаточно прав для выполнения этой команды!</value> <value>У тебя недостаточно прав для выполнения этой команды!</value>
</data>
<data name="YouWereBanned" xml:space="preserve">
<value>Тебя забанил {0} на сервере `{1}` за {2}</value>
</data> </data>
<data name="PunishmentExpired" xml:space="preserve"> <data name="PunishmentExpired" xml:space="preserve">
<value>Время наказания истекло</value> <value>Время наказания истекло</value>
@ -151,7 +148,7 @@
<value>Справка по командам:</value> <value>Справка по командам:</value>
</data> </data>
<data name="YouWereKicked" xml:space="preserve"> <data name="YouWereKicked" xml:space="preserve">
<value>Тебя кикнул {0} на сервере `{1}` за {2}</value> <value>Вы были выгнаны</value>
</data> </data>
<data name="Milliseconds" xml:space="preserve"> <data name="Milliseconds" xml:space="preserve">
<value>мс</value> <value>мс</value>
@ -516,4 +513,7 @@
<data name="UserAlreadyMuted" xml:space="preserve"> <data name="UserAlreadyMuted" xml:space="preserve">
<value>Этот пользователь уже в муте!</value> <value>Этот пользователь уже в муте!</value>
</data> </data>
<data name="YouWereBanned" xml:space="preserve">
<value>Вы были забанены</value>
</data>
</root> </root>

View file

@ -136,7 +136,7 @@
<value>у тебя прав нету, твои проблемы.</value> <value>у тебя прав нету, твои проблемы.</value>
</data> </data>
<data name="YouWereBanned" xml:space="preserve"> <data name="YouWereBanned" xml:space="preserve">
<value>здарова, тебя крч забанил {0} на сервере `{1}` за {2}</value> <value>вы были забанены</value>
</data> </data>
<data name="PunishmentExpired" xml:space="preserve"> <data name="PunishmentExpired" xml:space="preserve">
<value>время бана закончиловсь</value> <value>время бана закончиловсь</value>
@ -151,7 +151,7 @@
<value>туториал по приколам:</value> <value>туториал по приколам:</value>
</data> </data>
<data name="YouWereKicked" xml:space="preserve"> <data name="YouWereKicked" xml:space="preserve">
<value>здарова, тебя крч кикнул {0} на сервере `{1}` за {2}</value> <value>вы были кикнуты</value>
</data> </data>
<data name="Milliseconds" xml:space="preserve"> <data name="Milliseconds" xml:space="preserve">
<value>мс</value> <value>мс</value>
@ -511,7 +511,7 @@
<value>причина: {0}</value> <value>причина: {0}</value>
</data> </data>
<data name="DescriptionActionExpiresAt" xml:space="preserve"> <data name="DescriptionActionExpiresAt" xml:space="preserve">
<value>заживёт: {0}</value> <value>до: {0}</value>
</data> </data>
<data name="UserAlreadyMuted" xml:space="preserve"> <data name="UserAlreadyMuted" xml:space="preserve">
<value>этот шизоид УЖЕ замучился</value> <value>этот шизоид УЖЕ замучился</value>