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:
parent
e53bf8a374
commit
b7057d3447
7 changed files with 855 additions and 1225 deletions
|
@ -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())
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
1985
Messages.Designer.cs
generated
File diff suppressed because it is too large
Load diff
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Add table
Reference in a new issue