From eef5b3f948ba4a9087d02bb2944a281d46470bbf Mon Sep 17 00:00:00 2001 From: Kwoth Date: Tue, 16 Apr 2024 13:48:23 +0000 Subject: [PATCH 1/5] Fixed .clubapply hopefully, and removed some redundant discriminators --- src/NadekoBot/Db/Models/DiscordUser.cs | 7 ++++++- src/NadekoBot/Db/Models/Waifu.cs | 16 ++++++++-------- .../ServerLog/ServerLogCommandService.cs | 8 ++++---- src/NadekoBot/Modules/Gambling/Gambling.cs | 4 ++-- src/NadekoBot/Modules/Xp/Club/Club.cs | 4 ++-- src/NadekoBot/Modules/Xp/Club/ClubService.cs | 2 +- src/NadekoBot/Modules/Xp/Club/IClubService.cs | 3 +-- .../data/strings/responses/responses.en-US.json | 2 +- 8 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/NadekoBot/Db/Models/DiscordUser.cs b/src/NadekoBot/Db/Models/DiscordUser.cs index 61622a53c..1d967c3ae 100644 --- a/src/NadekoBot/Db/Models/DiscordUser.cs +++ b/src/NadekoBot/Db/Models/DiscordUser.cs @@ -28,5 +28,10 @@ public class DiscordUser : DbEntity => UserId.GetHashCode(); public override string ToString() - => Username + "#" + Discriminator; + { + if (string.IsNullOrWhiteSpace(Discriminator) || Discriminator == "0000") + return Username; + + return Username + "#" + Discriminator; + } } \ No newline at end of file diff --git a/src/NadekoBot/Db/Models/Waifu.cs b/src/NadekoBot/Db/Models/Waifu.cs index 39bb3de41..43a51dec7 100644 --- a/src/NadekoBot/Db/Models/Waifu.cs +++ b/src/NadekoBot/Db/Models/Waifu.cs @@ -19,25 +19,25 @@ public class WaifuInfo : DbEntity public override string ToString() { - var claimer = "no one"; var status = string.Empty; - var waifuUsername = Waifu.Username.TrimTo(20); - var claimerUsername = Claimer?.Username.TrimTo(20); + var waifuUsername = Waifu.ToString().TrimTo(20); + var claimer = Claimer?.ToString().TrimTo(20) + ?? "no one"; + + var affinity = Affinity?.ToString().TrimTo(20); - if (ClaimerId is not null) - claimer = $"{claimerUsername}#{Claimer.Discriminator}"; if (AffinityId is null) status = $"... but {waifuUsername}'s heart is empty"; else if (AffinityId == ClaimerId) - status = $"... and {waifuUsername} likes {claimerUsername} too <3"; + status = $"... and {waifuUsername} likes {claimer} too <3"; else { status = - $"... but {waifuUsername}'s heart belongs to {Affinity.Username.TrimTo(20)}#{Affinity.Discriminator}"; + $"... but {waifuUsername}'s heart belongs to {affinity}"; } - return $"**{waifuUsername}#{Waifu.Discriminator}** - claimed by **{claimer}**\n\t{status}"; + return $"**{waifuUsername}** - claimed by **{claimer}**\n\t{status}"; } } diff --git a/src/NadekoBot/Modules/Administration/ServerLog/ServerLogCommandService.cs b/src/NadekoBot/Modules/Administration/ServerLog/ServerLogCommandService.cs index 03e21ccf3..f20d39ee1 100644 --- a/src/NadekoBot/Modules/Administration/ServerLog/ServerLogCommandService.cs +++ b/src/NadekoBot/Modules/Administration/ServerLog/ServerLogCommandService.cs @@ -363,7 +363,7 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor if (before.Username != after.Username) { embed.WithTitle("👥 " + GetText(g, strs.username_changed)) - .WithDescription($"{before.Username}#{before.Discriminator} | {before.Id}") + .WithDescription($"{before.Username} | {before.Id}") .AddField("Old Name", $"{before.Username}", true) .AddField("New Name", $"{after.Username}", true) .WithFooter(CurrentTime(g)) @@ -905,7 +905,7 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor str = "🎙" + Format.Code(PrettyCurrentTime(usr.Guild)) + GetText(logChannel.Guild, - strs.user_vmoved("👤" + Format.Bold(usr.Username + "#" + usr.Discriminator), + strs.user_vmoved("👤" + Format.Bold(usr.Username), Format.Bold(beforeVch?.Name ?? ""), Format.Bold(afterVch?.Name ?? ""))); } @@ -914,7 +914,7 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor str = "🎙" + Format.Code(PrettyCurrentTime(usr.Guild)) + GetText(logChannel.Guild, - strs.user_vjoined("👤" + Format.Bold(usr.Username + "#" + usr.Discriminator), + strs.user_vjoined("👤" + Format.Bold(usr.Username), Format.Bold(afterVch?.Name ?? ""))); } else if (afterVch is null) @@ -922,7 +922,7 @@ public sealed class LogCommandService : ILogCommandService, IReadyExecutor str = "🎙" + Format.Code(PrettyCurrentTime(usr.Guild)) + GetText(logChannel.Guild, - strs.user_vleft("👤" + Format.Bold(usr.Username + "#" + usr.Discriminator), + strs.user_vleft("👤" + Format.Bold(usr.Username), Format.Bold(beforeVch.Name ?? ""))); } diff --git a/src/NadekoBot/Modules/Gambling/Gambling.cs b/src/NadekoBot/Modules/Gambling/Gambling.cs index c08f97e76..07d2a57bb 100644 --- a/src/NadekoBot/Modules/Gambling/Gambling.cs +++ b/src/NadekoBot/Modules/Gambling/Gambling.cs @@ -239,7 +239,7 @@ public partial class Gambling : GamblingModule var usr = membersArray[new NadekoRandom().Next(0, membersArray.Length)]; await SendConfirmAsync("🎟 " + GetText(strs.raffled_user), - $"**{usr.Username}#{usr.Discriminator}**", + $"**{usr.Username}**", footer: $"ID: {usr.Id}"); } @@ -258,7 +258,7 @@ public partial class Gambling : GamblingModule var usr = membersArray[new NadekoRandom().Next(0, membersArray.Length)]; await SendConfirmAsync("🎟 " + GetText(strs.raffled_user), - $"**{usr.Username}#{usr.Discriminator}**", + $"**{usr.Username}**", footer: $"ID: {usr.Id}"); } diff --git a/src/NadekoBot/Modules/Xp/Club/Club.cs b/src/NadekoBot/Modules/Xp/Club/Club.cs index 8d699465f..7f2dfbf49 100644 --- a/src/NadekoBot/Modules/Xp/Club/Club.cs +++ b/src/NadekoBot/Modules/Xp/Club/Club.cs @@ -259,8 +259,8 @@ public partial class Xp await ReplyConfirmLocalizedAsync(strs.club_applied(Format.Bold(club.ToString()))); else if (result == ClubApplyResult.Banned) await ReplyErrorLocalizedAsync(strs.club_join_banned); - else if (result == ClubApplyResult.InsufficientLevel) - await ReplyErrorLocalizedAsync(strs.club_insuff_lvl); + else if (result == ClubApplyResult.AlreadyApplied) + await ReplyErrorLocalizedAsync(strs.club_already_applied); else if (result == ClubApplyResult.AlreadyInAClub) await ReplyErrorLocalizedAsync(strs.club_already_in); } diff --git a/src/NadekoBot/Modules/Xp/Club/ClubService.cs b/src/NadekoBot/Modules/Xp/Club/ClubService.cs index 48e2360d1..7a569c5f2 100644 --- a/src/NadekoBot/Modules/Xp/Club/ClubService.cs +++ b/src/NadekoBot/Modules/Xp/Club/ClubService.cs @@ -146,7 +146,7 @@ public class ClubService : INService, IClubService return ClubApplyResult.Banned; if (club.Applicants.Any(x => x.UserId == du.Id)) - return ClubApplyResult.InsufficientLevel; + return ClubApplyResult.AlreadyApplied; var app = new ClubApplicants { diff --git a/src/NadekoBot/Modules/Xp/Club/IClubService.cs b/src/NadekoBot/Modules/Xp/Club/IClubService.cs index 5f4866044..8f090e451 100644 --- a/src/NadekoBot/Modules/Xp/Club/IClubService.cs +++ b/src/NadekoBot/Modules/Xp/Club/IClubService.cs @@ -27,8 +27,7 @@ public interface IClubService public enum ClubApplyResult { Success, - AlreadyInAClub, Banned, - InsufficientLevel + AlreadyApplied } \ No newline at end of file diff --git a/src/NadekoBot/data/strings/responses/responses.en-US.json b/src/NadekoBot/data/strings/responses/responses.en-US.json index 50a16a795..6767d3053 100644 --- a/src/NadekoBot/data/strings/responses/responses.en-US.json +++ b/src/NadekoBot/data/strings/responses/responses.en-US.json @@ -838,7 +838,7 @@ "server_leaderboard": "Server XP Leaderboard", "global_leaderboard": "Global XP Leaderboard", "modified": "Modified server XP of the user {0} by {1}", - "club_insuff_lvl": "You're insufficient level to join that club.", + "club_already_applied": "You've already applied to that club.", "club_join_banned": "You're banned from that club.", "club_already_in": "You are already a member of a club.", "club_create_error_name": "Failed creating the club. A club with that name already exists.", From d1db54498b1c746881567488d8de37fbdd0f8463 Mon Sep 17 00:00:00 2001 From: Kwoth Date: Tue, 16 Apr 2024 13:55:04 +0000 Subject: [PATCH 2/5] Updatec changelog. Upped version to 4.3.21 --- CHANGELOG.md | 8 ++++++++ src/NadekoBot/Services/Impl/StatsService.cs | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37ba26692..c6b61c707 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.com/en/1.0.0/) except date format. a-c-f-r-o +## [4.3.21] + +### Fixed +- Possible fix for a duplicate in `.h bank` +- Fixed `.stock` command +- Fixed `.clubapply` and `.clubaccept` +- Removed some redundant discriminators + ## [4.3.20] - 20.01.2024 ### Fixed diff --git a/src/NadekoBot/Services/Impl/StatsService.cs b/src/NadekoBot/Services/Impl/StatsService.cs index 970a004fc..44dbd239e 100644 --- a/src/NadekoBot/Services/Impl/StatsService.cs +++ b/src/NadekoBot/Services/Impl/StatsService.cs @@ -7,7 +7,7 @@ namespace NadekoBot.Services; public sealed class StatsService : IStatsService, IReadyExecutor, INService { - public const string BOT_VERSION = "4.3.20"; + public const string BOT_VERSION = "4.3.21"; public string Author => "Kwoth#2452"; From ef063883354b92c9d324bf7e4bb801d9d044c15f Mon Sep 17 00:00:00 2001 From: Cata Date: Fri, 19 Apr 2024 16:08:51 +0000 Subject: [PATCH 3/5] Added .setbanner command --- src/Nadeko.Medusa/Nadeko.Medusa.csproj | 2 +- .../Administration/Self/DoAsUserMessage.cs | 1 + .../Administration/Self/SelfCommands.cs | 10 ++++++ .../Administration/Self/SelfService.cs | 35 ++++++++++++++++++- src/NadekoBot/NadekoBot.csproj | 2 +- src/NadekoBot/data/aliases.yml | 2 ++ .../data/strings/commands/commands.en-US.yml | 4 +++ .../strings/responses/responses.en-US.json | 1 + 8 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/Nadeko.Medusa/Nadeko.Medusa.csproj b/src/Nadeko.Medusa/Nadeko.Medusa.csproj index b21da76eb..0104e1a35 100644 --- a/src/Nadeko.Medusa/Nadeko.Medusa.csproj +++ b/src/Nadeko.Medusa/Nadeko.Medusa.csproj @@ -12,7 +12,7 @@ - + diff --git a/src/NadekoBot/Modules/Administration/Self/DoAsUserMessage.cs b/src/NadekoBot/Modules/Administration/Self/DoAsUserMessage.cs index 86d5ad2f2..5eebaa1cb 100644 --- a/src/NadekoBot/Modules/Administration/Self/DoAsUserMessage.cs +++ b/src/NadekoBot/Modules/Administration/Self/DoAsUserMessage.cs @@ -146,4 +146,5 @@ public sealed class DoAsUserMessage : IUserMessage public MessageResolvedData ResolvedData => _msg.ResolvedData; public IUserMessage ReferencedMessage => _msg.ReferencedMessage; + public IMessageInteractionMetadata InteractionMetadata { get; } } \ No newline at end of file diff --git a/src/NadekoBot/Modules/Administration/Self/SelfCommands.cs b/src/NadekoBot/Modules/Administration/Self/SelfCommands.cs index e76c49ba9..3e3113241 100644 --- a/src/NadekoBot/Modules/Administration/Self/SelfCommands.cs +++ b/src/NadekoBot/Modules/Administration/Self/SelfCommands.cs @@ -501,6 +501,16 @@ public partial class Administration if (success) await ReplyConfirmLocalizedAsync(strs.set_avatar); } + + [Cmd] + [OwnerOnly] + public async Task SetBanner([Leftover] string img = null) + { + var success = await _service.SetBanner(img); + + if (success) + await ReplyConfirmLocalizedAsync(strs.set_banner); + } [Cmd] [OwnerOnly] diff --git a/src/NadekoBot/Modules/Administration/Self/SelfService.cs b/src/NadekoBot/Modules/Administration/Self/SelfService.cs index fa8a70ca0..a23bd95ed 100644 --- a/src/NadekoBot/Modules/Administration/Self/SelfService.cs +++ b/src/NadekoBot/Modules/Administration/Self/SelfService.cs @@ -3,7 +3,6 @@ using Microsoft.EntityFrameworkCore; using NadekoBot.Common.ModuleBehaviors; using NadekoBot.Services.Database.Models; using System.Collections.Immutable; -using Nadeko.Common; namespace NadekoBot.Modules.Administration.Services; @@ -321,6 +320,40 @@ public sealed class SelfService : IExecNoCommand, IReadyExecutor, INService return true; } + public async Task SetBanner(string img) + { + if (string.IsNullOrWhiteSpace(img)) + { + return false; + } + + if (!Uri.IsWellFormedUriString(img, UriKind.Absolute)) + { + return false; + } + + var uri = new Uri(img); + + using var http = _httpFactory.CreateClient(); + using var sr = await http.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead); + + if (!sr.IsImage()) + { + return false; + } + + if (sr.GetContentLength() > 8.Megabytes().Bytes) + { + return false; + } + + await using var imageStream = await sr.Content.ReadAsStreamAsync(); + + await _client.CurrentUser.ModifyAsync(x => x.Banner = new Image(imageStream)); + return true; + } + + public void ClearStartupCommands() { using var uow = _db.GetDbContext(); diff --git a/src/NadekoBot/NadekoBot.csproj b/src/NadekoBot/NadekoBot.csproj index fdd220e1a..a22f2f9fe 100644 --- a/src/NadekoBot/NadekoBot.csproj +++ b/src/NadekoBot/NadekoBot.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/NadekoBot/data/aliases.yml b/src/NadekoBot/data/aliases.yml index 85157bcf2..fceb0065e 100644 --- a/src/NadekoBot/data/aliases.yml +++ b/src/NadekoBot/data/aliases.yml @@ -195,6 +195,8 @@ setnick: setavatar: - setavatar - setav +setbanner: + - setbanner setgame: - setgame send: diff --git a/src/NadekoBot/data/strings/commands/commands.en-US.yml b/src/NadekoBot/data/strings/commands/commands.en-US.yml index 8023f3180..ff41fc473 100644 --- a/src/NadekoBot/data/strings/commands/commands.en-US.yml +++ b/src/NadekoBot/data/strings/commands/commands.en-US.yml @@ -402,6 +402,10 @@ setavatar: desc: "Sets a new avatar image for the NadekoBot. Parameter is a direct link to an image." args: - "https://i.imgur.com/xTG3a1I.jpg" +setbanner: + desc: "Sets a new banner image for the NadekoBot. Parameter is a direct link to an image. Supports gifs." + args: + - "https://i.imgur.com/xTG3a1I.jpg" setgame: desc: "Sets the bots game status to either Playing, Listening, or Watching." args: diff --git a/src/NadekoBot/data/strings/responses/responses.en-US.json b/src/NadekoBot/data/strings/responses/responses.en-US.json index 6767d3053..b59843409 100644 --- a/src/NadekoBot/data/strings/responses/responses.en-US.json +++ b/src/NadekoBot/data/strings/responses/responses.en-US.json @@ -184,6 +184,7 @@ "setrole": "Successfully added role {0} to user {1}", "setrole_err": "Failed to add role. I have insufficient permissions.", "set_avatar": "New avatar set!", + "set_banner": "New banner set!", "set_channel_name": "New channel name set.", "set_game": "New game set!", "set_stream": "New stream set!", From 7297318538d168548bfb94d77b427c694d336d03 Mon Sep 17 00:00:00 2001 From: Kwoth Date: Tue, 23 Apr 2024 09:14:27 +0000 Subject: [PATCH 4/5] Fixed pagination emoji, closes #427 --- src/NadekoBot/_Extensions/IMessageChannelExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NadekoBot/_Extensions/IMessageChannelExtensions.cs b/src/NadekoBot/_Extensions/IMessageChannelExtensions.cs index 47cfcc114..ef7489280 100644 --- a/src/NadekoBot/_Extensions/IMessageChannelExtensions.cs +++ b/src/NadekoBot/_Extensions/IMessageChannelExtensions.cs @@ -167,8 +167,8 @@ public static class MessageChannelExtensions private const string BUTTON_LEFT = "BUTTON_LEFT"; private const string BUTTON_RIGHT = "BUTTON_RIGHT"; - private static readonly IEmote _arrowLeft = Emote.Parse("<:x:969658061805465651>"); - private static readonly IEmote _arrowRight = Emote.Parse("<:x:969658062220701746>"); + private static readonly IEmote _arrowLeft = Emote.Parse("<:x:1232256519844790302>"); + private static readonly IEmote _arrowRight = Emote.Parse("<:x:1232256515298295838>"); public static Task SendPaginatedConfirmAsync( this ICommandContext ctx, From 23b3ad5837985b8b44702b5658c3585f0bc7da20 Mon Sep 17 00:00:00 2001 From: Kwoth Date: Tue, 23 Apr 2024 09:14:27 +0000 Subject: [PATCH 5/5] * Fixed pagination emoji, closes #427 * Version upped to 4.3.22 --- CHANGELOG.md | 11 ++++++++++- src/NadekoBot/Services/Impl/StatsService.cs | 2 +- .../_Extensions/IMessageChannelExtensions.cs | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6b61c707..7b95b0b79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,16 @@ Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.com/en/1.0.0/) except date format. a-c-f-r-o -## [4.3.21] +## [4.3.22] - 23.04.2023 + +### Added +- Added `.setbanner` command (thx cata) + +### Fixed +- Fixed pagination error due to a missing emoji + + +## [4.3.21] - 19.04.2023 ### Fixed - Possible fix for a duplicate in `.h bank` diff --git a/src/NadekoBot/Services/Impl/StatsService.cs b/src/NadekoBot/Services/Impl/StatsService.cs index 44dbd239e..534860aea 100644 --- a/src/NadekoBot/Services/Impl/StatsService.cs +++ b/src/NadekoBot/Services/Impl/StatsService.cs @@ -7,7 +7,7 @@ namespace NadekoBot.Services; public sealed class StatsService : IStatsService, IReadyExecutor, INService { - public const string BOT_VERSION = "4.3.21"; + public const string BOT_VERSION = "4.3.22"; public string Author => "Kwoth#2452"; diff --git a/src/NadekoBot/_Extensions/IMessageChannelExtensions.cs b/src/NadekoBot/_Extensions/IMessageChannelExtensions.cs index 47cfcc114..ef7489280 100644 --- a/src/NadekoBot/_Extensions/IMessageChannelExtensions.cs +++ b/src/NadekoBot/_Extensions/IMessageChannelExtensions.cs @@ -167,8 +167,8 @@ public static class MessageChannelExtensions private const string BUTTON_LEFT = "BUTTON_LEFT"; private const string BUTTON_RIGHT = "BUTTON_RIGHT"; - private static readonly IEmote _arrowLeft = Emote.Parse("<:x:969658061805465651>"); - private static readonly IEmote _arrowRight = Emote.Parse("<:x:969658062220701746>"); + private static readonly IEmote _arrowLeft = Emote.Parse("<:x:1232256519844790302>"); + private static readonly IEmote _arrowRight = Emote.Parse("<:x:1232256515298295838>"); public static Task SendPaginatedConfirmAsync( this ICommandContext ctx,