forked from TeamInklings/Octobot
Add ReSharper code inspection (#10)
And cancel workflows in progress to avoid having multiple of the same workflow running
This commit is contained in:
parent
938f918445
commit
28b0668628
5 changed files with 80 additions and 37 deletions
12
.github/workflows/codeql.yml
vendored
12
.github/workflows/codeql.yml
vendored
|
@ -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
36
.github/workflows/resharper.yml
vendored
Normal 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
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue