diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0be2fa736..be04a8072 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -165,17 +165,3 @@ docker-build: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_TAG exists: - Dockerfile - -qodana: - stage: test - allow_failure: true - image: - name: jetbrains/qodana-dotnet:latest - entrypoint: [""] - variables: - QODANA_TOKEN: $qodana_token - script: - - qodana - artifacts: - paths: - - qodana \ No newline at end of file diff --git a/src/NadekoBot/Bot.cs b/src/NadekoBot/Bot.cs index 96312488c..38652e8f4 100644 --- a/src/NadekoBot/Bot.cs +++ b/src/NadekoBot/Bot.cs @@ -114,7 +114,7 @@ public sealed class Bot : IBot // svcs.Components.Remove(); // svcs.Components.Add(); - svcs.AddSingleton(_ => _credsProvider.GetCreds()); + svcs.AddSingleton(_ => _credsProvider.GetCreds()); svcs.AddSingleton(_db); svcs.AddSingleton(_credsProvider); svcs.AddSingleton(Client); diff --git a/src/NadekoBot/Modules/Administration/Self/SelfCommands.cs b/src/NadekoBot/Modules/Administration/Self/SelfCommands.cs index 0ee308398..d271d9b66 100644 --- a/src/NadekoBot/Modules/Administration/Self/SelfCommands.cs +++ b/src/NadekoBot/Modules/Administration/Self/SelfCommands.cs @@ -546,7 +546,7 @@ public partial class Administration text = await repSvc.ReplaceAsync(text, repCtx); await Response().Channel(ch).Text(text).SendAsync(); - await ctx.OkAsync();; + await ctx.OkAsync(); } [Cmd] diff --git a/src/NadekoBot/Modules/Gambling/PlantPick/PlantPickService.cs b/src/NadekoBot/Modules/Gambling/PlantPick/PlantPickService.cs index e0c580f62..28462586b 100644 --- a/src/NadekoBot/Modules/Gambling/PlantPick/PlantPickService.cs +++ b/src/NadekoBot/Modules/Gambling/PlantPick/PlantPickService.cs @@ -31,7 +31,6 @@ public class PlantPickService : INService, IExecNoCommand public PlantPickService( DbService db, - CommandHandler cmd, IBotStrings strings, IImageCache images, FontProvider fonts, @@ -107,7 +106,6 @@ public class PlantPickService : INService, IExecNoCommand /// Get a random currency image stream, with an optional password sticked onto it. /// /// Optional password to add to top left corner. - /// Extension of the file, defaults to png /// Stream of the currency image public async Task<(Stream, string)> GetRandomCurrencyImageAsync(string pass) { diff --git a/src/NadekoBot/Modules/Gambling/Waifus/WaifuClaimCommands.cs b/src/NadekoBot/Modules/Gambling/Waifus/WaifuClaimCommands.cs index f5597d400..42005fe74 100644 --- a/src/NadekoBot/Modules/Gambling/Waifus/WaifuClaimCommands.cs +++ b/src/NadekoBot/Modules/Gambling/Waifus/WaifuClaimCommands.cs @@ -3,6 +3,7 @@ using NadekoBot.Modules.Gambling.Common; using NadekoBot.Modules.Gambling.Common.Waifu; using NadekoBot.Modules.Gambling.Services; using NadekoBot.Db.Models; +using System.Globalization; namespace NadekoBot.Modules.Gambling; @@ -152,12 +153,12 @@ public partial class Gambling await Response().Confirm(strs.waifu_divorced_notlike(N(amount))).SendAsync(); else if (result == DivorceResult.NotYourWife) await Response().Error(strs.waifu_not_yours).SendAsync(); - else + else if (remaining is { } rem) { await Response() .Error(strs.waifu_recent_divorce( - Format.Bold(((int)remaining?.TotalHours).ToString()), - Format.Bold(remaining?.Minutes.ToString()))) + Format.Bold(((int)rem.TotalHours).ToString()), + Format.Bold(rem.Minutes.ToString()))) .SendAsync(); } } @@ -237,7 +238,7 @@ public partial class Gambling private string GetLbString(WaifuLbResult w) { var claimer = "no one"; - var status = string.Empty; + string status; var waifuUsername = w.Username.TrimTo(20); var claimerUsername = w.Claimer?.TrimTo(20); @@ -376,14 +377,15 @@ public partial class Gambling if (sucess) { await Response() - .Confirm(strs.waifu_gift(Format.Bold($"{GetCountString(items)}{items.Item} {items.Item.ItemEmoji}"), + .Confirm(strs.waifu_gift( + Format.Bold($"{GetCountString(items)}{items.Item} {items.Item.ItemEmoji}"), Format.Bold(waifu.ToString()))) .SendAsync(); } else await Response().Error(strs.not_enough(CurrencySign)).SendAsync(); } - + private static string GetCountString(MultipleWaifuItems items) => items.Count > 1 ? $"{items.Count}x " diff --git a/src/NadekoBot/Modules/Games/Trivia/Games.cs b/src/NadekoBot/Modules/Games/Trivia/TriviaCommands.cs similarity index 98% rename from src/NadekoBot/Modules/Games/Trivia/Games.cs rename to src/NadekoBot/Modules/Games/Trivia/TriviaCommands.cs index 92714a2ac..aca08e2b2 100644 --- a/src/NadekoBot/Modules/Games/Trivia/Games.cs +++ b/src/NadekoBot/Modules/Games/Trivia/TriviaCommands.cs @@ -107,9 +107,9 @@ public partial class Games return sb.ToString(); } - private EmbedBuilder? questionEmbed = null; - private IUserMessage? questionMessage = null; - private bool showHowToQuit = false; + private EmbedBuilder? questionEmbed; + private IUserMessage? questionMessage; + private bool showHowToQuit; private void RegisterEvents(TriviaGame trivia) { diff --git a/src/NadekoBot/Modules/Games/Trivia/TriviaGame.cs b/src/NadekoBot/Modules/Games/Trivia/TriviaGame.cs index 45d603a2a..e1a29992f 100644 --- a/src/NadekoBot/Modules/Games/Trivia/TriviaGame.cs +++ b/src/NadekoBot/Modules/Games/Trivia/TriviaGame.cs @@ -11,12 +11,19 @@ public sealed class TriviaGame private readonly IQuestionPool _questionPool; #region Events + public event Func OnQuestion = static delegate { return Task.CompletedTask; }; public event Func OnHint = static delegate { return Task.CompletedTask; }; public event Func OnStats = static delegate { return Task.CompletedTask; }; - public event Func OnGuess = static delegate { return Task.CompletedTask; }; + + public event Func OnGuess = static delegate + { + return Task.CompletedTask; + }; + public event Func OnTimeout = static delegate { return Task.CompletedTask; }; public event Func OnEnded = static delegate { return Task.CompletedTask; }; + #endregion private bool _isStopped; @@ -24,7 +31,7 @@ public sealed class TriviaGame public TriviaQuestion? CurrentQuestion { get; set; } - private readonly ConcurrentDictionary _users = new (); + private readonly ConcurrentDictionary _users = new(); private readonly Channel<(TriviaUser User, string Input)> _inputs = Channel.CreateUnbounded<(TriviaUser, string)>(new UnboundedChannelOptions @@ -41,8 +48,8 @@ public sealed class TriviaGame _questionPool = _opts.IsPokemon ? new PokemonQuestionPool(cache) : new DefaultQuestionPool(cache); - } + public async Task RunAsync() { await GameLoop(); @@ -50,7 +57,8 @@ public sealed class TriviaGame private async Task GameLoop() { - Task TimeOutFactory() => Task.Delay(_opts.QuestionTimer * 1000 / 2); + Task TimeOutFactory() + => Task.Delay(_opts.QuestionTimer * 1000 / 2); var errorCount = 0; var inactivity = 0; @@ -91,7 +99,8 @@ public sealed class TriviaGame { // clear out all of the past guesses while (_inputs.Reader.TryRead(out _)) - ; + { + } await OnQuestion(this, question); } @@ -121,7 +130,7 @@ public sealed class TriviaGame if (task == halfGuessTimerTask) { readCancel.Cancel(); - + // if hint is already sent, means time expired // break (end the round) if (hintSent) @@ -213,7 +222,7 @@ public sealed class TriviaGame public async Task TriggerQuestionAsync() { - if(CurrentQuestion is TriviaQuestion q) + if (CurrentQuestion is TriviaQuestion q) await OnQuestion(this, q); } } \ No newline at end of file diff --git a/src/NadekoBot/Modules/Music/_common/Resolvers/RadioResolveStrategy.cs b/src/NadekoBot/Modules/Music/_common/Resolvers/RadioResolveStrategy.cs index dc783e56b..32696f5d9 100644 --- a/src/NadekoBot/Modules/Music/_common/Resolvers/RadioResolveStrategy.cs +++ b/src/NadekoBot/Modules/Music/_common/Resolvers/RadioResolveStrategy.cs @@ -61,8 +61,8 @@ public class RadioResolver : IRadioResolver try { var m = _m3URegex.Match(file); - var res = m.Groups["url"]?.ToString(); - return res?.Trim(); + var res = m.Groups["url"].ToString(); + return res.Trim(); } catch { @@ -76,8 +76,8 @@ public class RadioResolver : IRadioResolver try { var m = _asxRegex.Match(file); - var res = m.Groups["url"]?.ToString(); - return res?.Trim(); + var res = m.Groups["url"].ToString(); + return res.Trim(); } catch { @@ -91,8 +91,8 @@ public class RadioResolver : IRadioResolver try { var m = _xspfRegex.Match(file); - var res = m.Groups["url"]?.ToString(); - return res?.Trim(); + var res = m.Groups["url"].ToString(); + return res.Trim(); } catch { diff --git a/src/NadekoBot/Modules/Patronage/PatronageService.cs b/src/NadekoBot/Modules/Patronage/PatronageService.cs index d676bd9f7..703294d83 100644 --- a/src/NadekoBot/Modules/Patronage/PatronageService.cs +++ b/src/NadekoBot/Modules/Patronage/PatronageService.cs @@ -19,16 +19,11 @@ public sealed class PatronageService public int Priority => int.MinValue; - private static readonly PatronTier[] _tiers = Enum.GetValues(); - private readonly PatronageConfig _pConf; private readonly DbService _db; private readonly DiscordSocketClient _client; private readonly ISubscriptionHandler _subsHandler; - private static readonly TypedKey _quotaKey - = new($"quota:last_hourly_reset"); - private readonly IBotCache _cache; private readonly IBotCredsProvider _creds; private readonly IMessageSenderService _sender; @@ -133,19 +128,19 @@ public sealed class PatronageService // user is charged again for this month // if his sub would end in teh future, extend it by one month. // if it's not, just add 1 month to the last charge date - var count = await ctx.GetTable() - .Where(x => x.UniquePlatformUserId - == subscriber.UniquePlatformUserId) - .UpdateAsync(old => new() - { - UserId = subscriber.UserId, - AmountCents = subscriber.Cents, - LastCharge = lastChargeUtc, - ValidThru = old.ValidThru >= todayDate - // ? Sql.DateAdd(Sql.DateParts.Month, 1, old.ValidThru).Value - ? old.ValidThru.AddMonths(1) - : dateInOneMonth, - }); + await ctx.GetTable() + .Where(x => x.UniquePlatformUserId + == subscriber.UniquePlatformUserId) + .UpdateAsync(old => new() + { + UserId = subscriber.UserId, + AmountCents = subscriber.Cents, + LastCharge = lastChargeUtc, + ValidThru = old.ValidThru >= todayDate + // ? Sql.DateAdd(Sql.DateParts.Month, 1, old.ValidThru).Value + ? old.ValidThru.AddMonths(1) + : dateInOneMonth, + }); dbPatron.UserId = subscriber.UserId; diff --git a/src/NadekoBot/Modules/Searches/Crypto/CryptoCommands.cs b/src/NadekoBot/Modules/Searches/Crypto/CryptoCommands.cs index 162ee53c8..07fb9a31a 100644 --- a/src/NadekoBot/Modules/Searches/Crypto/CryptoCommands.cs +++ b/src/NadekoBot/Modules/Searches/Crypto/CryptoCommands.cs @@ -65,18 +65,6 @@ public partial class Searches var change = (stock.Price - stock.Close).ToString("N2", Culture); var changePercent = (1 - (stock.Close / stock.Price)).ToString("P1", Culture); - var sign50 = stock.Change50d >= 0 - ? "\\🔼" - : "\\🔻"; - - var change50 = (stock.Change50d).ToString("P1", Culture); - - var sign200 = stock.Change200d >= 0 - ? "\\🔼" - : "\\🔻"; - - var change200 = (stock.Change200d).ToString("P1", Culture); - var price = stock.Price.ToString("C2", localCulture); var eb = _sender.CreateEmbed() diff --git a/src/NadekoBot/Modules/Utility/Giveaway/GiveawayService.cs b/src/NadekoBot/Modules/Utility/Giveaway/GiveawayService.cs index 631b2540e..2de27ec9e 100644 --- a/src/NadekoBot/Modules/Utility/Giveaway/GiveawayService.cs +++ b/src/NadekoBot/Modules/Utility/Giveaway/GiveawayService.cs @@ -19,7 +19,6 @@ public sealed class GiveawayService : INService, IReadyExecutor private readonly IMemoryCache _cache; private SortedSet _giveawayCache = new SortedSet(); private readonly NadekoRandom _rng; - private readonly ConcurrentDictionary _rerolls = new(); public GiveawayService(DbService db, IBotCredentials creds, DiscordSocketClient client, IMessageSenderService sender, IBotStrings strings, ILocalization localization, IMemoryCache cache) diff --git a/src/NadekoBot/_common/NinjectIKernelExtensions.cs b/src/NadekoBot/_common/DryIocExtensions.cs similarity index 80% rename from src/NadekoBot/_common/NinjectIKernelExtensions.cs rename to src/NadekoBot/_common/DryIocExtensions.cs index beaaa199b..7ba57642f 100644 --- a/src/NadekoBot/_common/NinjectIKernelExtensions.cs +++ b/src/NadekoBot/_common/DryIocExtensions.cs @@ -20,14 +20,6 @@ public static class DryIocExtensions return container; } - public static IContainer AddSingleton(this IContainer container, Func factory) - where TImpl : TSvc - { - container.RegisterDelegate(factory, Reuse.Singleton); - - return container; - } - public static IContainer AddSingleton(this IContainer container) { container.Register(Reuse.Singleton); diff --git a/src/NadekoBot/_common/Medusa/Common/MedusaIoCKernelModule.cs b/src/NadekoBot/_common/Medusa/Common/MedusaIoCKernelModule.cs index 2cf91b15b..24e776f99 100644 --- a/src/NadekoBot/_common/Medusa/Common/MedusaIoCKernelModule.cs +++ b/src/NadekoBot/_common/Medusa/Common/MedusaIoCKernelModule.cs @@ -34,7 +34,7 @@ public sealed class MedusaNinjectIocModule : IIocModule, IDisposable if (isLoaded) return; - foreach (var (type, data) in _types) + foreach (var (type, _) in _types) { var attribute = type.GetCustomAttribute()!;