Add ReSharper code inspection (#10)

And cancel workflows in progress to avoid having multiple of the same
workflow running
This commit is contained in:
l1ttleO 2022-12-09 16:47:11 +05:00 committed by GitHub
parent 938f918445
commit 28b0668628
Signed by: GitHub
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 80 additions and 37 deletions

View file

@ -1,4 +1,7 @@
name: "CodeQL" name: "CodeQL"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on: on:
push: push:
@ -10,7 +13,7 @@ on:
jobs: jobs:
analyze: analyze:
name: Analyze name: Analyze code
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
actions: read actions: read
@ -26,19 +29,16 @@ jobs:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v3 uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v2 uses: github/codeql-action/init@v2
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
queries: +security-extended,security-and-quality queries: +security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - name: Build solution
# If this step fails, then you should remove it and run the build manually
- name: Autobuild
uses: github/codeql-action/autobuild@v2 uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis - name: Perform CodeQL analysis
uses: github/codeql-action/analyze@v2 uses: github/codeql-action/analyze@v2
with: with:
category: "/language:${{matrix.language}}" category: "/language:${{matrix.language}}"

36
.github/workflows/resharper.yml vendored Normal file
View file

@ -0,0 +1,36 @@
name: "ReSharper"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
inspect-code:
name: Inspect code
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Restore dependencies and tools
run: dotnet restore
- name: ReSharper CLI InspectCode
uses: muno92/resharper_inspectcode@1.6.0
with:
solutionPath: ./Boyfriend-CSharp.sln
ignoreIssueType: InvertIf
solutionWideAnalysis: true

View file

@ -60,7 +60,7 @@ public static class Boyfriend {
private static async Task Init() { private static async Task Init() {
var token = (await File.ReadAllTextAsync("token.txt")).Trim(); var token = (await File.ReadAllTextAsync("token.txt")).Trim();
Client.Log += x => Log(x); Client.Log += Log;
await Client.LoginAsync(TokenType.Bot, token); await Client.LoginAsync(TokenType.Bot, token);
await Client.StartAsync(); await Client.StartAsync();
@ -151,4 +151,3 @@ public static class Boyfriend {
return removedRoles; return removedRoles;
} }
} }

View file

@ -73,7 +73,8 @@ public sealed class CommandProcessor {
} }
public void Reply(string response, string? customEmoji = null) { public void Reply(string response, string? customEmoji = null) {
Utils.SafeAppendToBuilder(_stackedReplyMessage, $"{customEmoji ?? ReplyEmojis.Success} {response}", Context.Message); Utils.SafeAppendToBuilder(_stackedReplyMessage, $"{customEmoji ?? ReplyEmojis.Success} {response}",
Context.Message);
} }
public void Audit(string action, bool isPublic = true) { public void Audit(string action, bool isPublic = true) {
@ -127,19 +128,23 @@ public sealed class CommandProcessor {
public bool HasPermission(GuildPermission permission) { public bool HasPermission(GuildPermission permission) {
if (!Context.Guild.CurrentUser.GuildPermissions.Has(permission)) { if (!Context.Guild.CurrentUser.GuildPermissions.Has(permission)) {
Utils.SafeAppendToBuilder(_stackedReplyMessage, $"{ReplyEmojis.NoPermission} {Utils.GetMessage($"BotCannot{permission}")}", Utils.SafeAppendToBuilder(_stackedReplyMessage,
$"{ReplyEmojis.NoPermission} {Utils.GetMessage($"BotCannot{permission}")}",
Context.Message); Context.Message);
return false; return false;
} }
if (Context.Guild.GetUser(Context.User.Id).GuildPermissions.Has(permission) if (!Context.Guild.GetUser(Context.User.Id).GuildPermissions.Has(permission)
|| Context.Guild.OwnerId == Context.User.Id) return true; && Context.Guild.OwnerId != Context.User.Id) {
Utils.SafeAppendToBuilder(_stackedReplyMessage,
Utils.SafeAppendToBuilder(_stackedReplyMessage, $"{ReplyEmojis.NoPermission} {Utils.GetMessage($"UserCannot{permission}")}", $"{ReplyEmojis.NoPermission} {Utils.GetMessage($"UserCannot{permission}")}",
Context.Message); Context.Message);
return false; return false;
} }
return true;
}
public SocketGuildUser? GetMember(SocketUser user) { public SocketGuildUser? GetMember(SocketUser user) {
return Context.Guild.GetUser(user.Id); return Context.Guild.GetUser(user.Id);
} }
@ -202,13 +207,16 @@ public sealed class CommandProcessor {
return null; return null;
} }
if (i <= max) return i; if (i > max) {
Utils.SafeAppendToBuilder(_stackedReplyMessage, Utils.SafeAppendToBuilder(_stackedReplyMessage,
$"{ReplyEmojis.InvalidArgument} {string.Format(Utils.GetMessage($"{argument}TooLarge"), max.ToString())}", $"{ReplyEmojis.InvalidArgument} {string.Format(Utils.GetMessage($"{argument}TooLarge"), max.ToString())}",
Context.Message); Context.Message);
return null; return null;
} }
return i;
}
public static TimeSpan GetTimeSpan(string[] args, int index) { public static TimeSpan GetTimeSpan(string[] args, int index) {
var infinity = TimeSpan.FromMilliseconds(-1); var infinity = TimeSpan.FromMilliseconds(-1);
if (index >= args.Length) return infinity; if (index >= args.Length) return infinity;
@ -268,9 +276,12 @@ public sealed class CommandProcessor {
return false; return false;
} }
if (Context.Guild.Owner.Id == Context.User.Id || GetMember().Hierarchy > user.Hierarchy) return true; if (Context.Guild.Owner.Id != Context.User.Id && GetMember().Hierarchy <= user.Hierarchy) {
Utils.SafeAppendToBuilder(_stackedReplyMessage, Utils.SafeAppendToBuilder(_stackedReplyMessage,
$"{ReplyEmojis.CantInteract} {Utils.GetMessage($"UserCannot{action}Target")}", Context.Message); $"{ReplyEmojis.CantInteract} {Utils.GetMessage($"UserCannot{action}Target")}", Context.Message);
return false; return false;
} }
return true;
}
} }

View file

@ -1,4 +1,3 @@
using System.Diagnostics.CodeAnalysis;
using Discord; using Discord;
using Discord.Rest; using Discord.Rest;
using Discord.WebSocket; using Discord.WebSocket;
@ -9,17 +8,16 @@ public static class EventHandler {
private static readonly DiscordSocketClient Client = Boyfriend.Client; private static readonly DiscordSocketClient Client = Boyfriend.Client;
private static bool _sendReadyMessages = true; private static bool _sendReadyMessages = true;
[SuppressMessage("ReSharper", "ConvertClosureToMethodGroup")]
public static void InitEvents() { public static void InitEvents() {
Client.Ready += () => ReadyEvent(); Client.Ready += ReadyEvent;
Client.MessageDeleted += (x, y) => MessageDeletedEvent(x, y); Client.MessageDeleted += MessageDeletedEvent;
Client.MessageReceived += x => MessageReceivedEvent(x); Client.MessageReceived += MessageReceivedEvent;
Client.MessageUpdated += (x, y, z) => MessageUpdatedEvent(x, y, z); Client.MessageUpdated += MessageUpdatedEvent;
Client.UserJoined += x => UserJoinedEvent(x); Client.UserJoined += UserJoinedEvent;
Client.GuildScheduledEventCreated += x => ScheduledEventCreatedEvent(x); Client.GuildScheduledEventCreated += ScheduledEventCreatedEvent;
Client.GuildScheduledEventCancelled += x => ScheduledEventCancelledEvent(x); Client.GuildScheduledEventCancelled += ScheduledEventCancelledEvent;
Client.GuildScheduledEventStarted += x => ScheduledEventStartedEvent(x); Client.GuildScheduledEventStarted += ScheduledEventStartedEvent;
Client.GuildScheduledEventCompleted += x => ScheduledEventCompletedEvent(x); Client.GuildScheduledEventCompleted += ScheduledEventCompletedEvent;
} }
private static Task ReadyEvent() { private static Task ReadyEvent() {
@ -175,4 +173,3 @@ public static class EventHandler {
Utils.GetHumanizedTimeOffset(DateTimeOffset.Now.Subtract(scheduledEvent.StartTime)))); Utils.GetHumanizedTimeOffset(DateTimeOffset.Now.Subtract(scheduledEvent.StartTime))));
} }
} }