Skip to content

Commit 1e8aa6e

Browse files
committed
Merge branch 'main' into milkshake/mass-cmds
2 parents f906d76 + 762ba75 commit 1e8aa6e

File tree

11 files changed

+146
-73
lines changed

11 files changed

+146
-73
lines changed

Cliptok.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515

1616
<ItemGroup>
1717
<PackageReference Include="Abyssal.HumanDateParser" Version="2.0.0-20191113.1" />
18-
<PackageReference Include="DSharpPlus" Version="5.0.0-nightly-02520" />
19-
<PackageReference Include="DSharpPlus.Commands" Version="5.0.0-nightly-02520" />
18+
<PackageReference Include="DSharpPlus" Version="5.0.0-nightly-02532" />
19+
<PackageReference Include="DSharpPlus.Commands" Version="5.0.0-nightly-02532" />
2020
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="9.0.2" />
2121
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.5">
2222
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

CommandChecks/HomeServerPerms.cs

Lines changed: 21 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -28,41 +28,30 @@ public static async Task<ServerPermLevel> GetPermLevelAsync(DiscordMember target
2828
if (target is null || target.Guild is null || target.Guild.Id != Program.cfgjson.ServerID)
2929
return ServerPermLevel.Nothing;
3030

31-
// Torch approved of this.
3231
if (target.IsOwner)
3332
return ServerPermLevel.Owner;
34-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.AdminRole)) || target.Id == Program.discord.CurrentUser.Id)
33+
34+
if (target.Id == Program.discord.CurrentUser.Id)
3535
return ServerPermLevel.Admin;
36-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.ModRole)))
37-
return ServerPermLevel.Moderator;
38-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.MutedRole)))
39-
return ServerPermLevel.Muted;
40-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TrialModRole)))
41-
return ServerPermLevel.TrialModerator;
42-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TqsRoleId)))
43-
return ServerPermLevel.TechnicalQueriesSlayer;
44-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TierRoles[9])))
45-
return ServerPermLevel.TierX;
46-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TierRoles[8])))
47-
return ServerPermLevel.TierS;
48-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TierRoles[7])))
49-
return ServerPermLevel.Tier8;
50-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TierRoles[6])))
51-
return ServerPermLevel.Tier7;
52-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TierRoles[5])))
53-
return ServerPermLevel.Tier6;
54-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TierRoles[4])))
55-
return ServerPermLevel.Tier5;
56-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TierRoles[3])))
57-
return ServerPermLevel.Tier4;
58-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TierRoles[2])))
59-
return ServerPermLevel.Tier3;
60-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TierRoles[1])))
61-
return ServerPermLevel.Tier2;
62-
else if (target.Roles.Contains(await target.Guild.GetRoleAsync(Program.cfgjson.TierRoles[0])))
63-
return ServerPermLevel.Tier1;
64-
else
65-
return ServerPermLevel.Nothing;
36+
37+
bool HasRole(ulong roleId) => target.Roles.Any(r => r.Id == roleId);
38+
39+
return HasRole(Program.cfgjson.AdminRole) ? ServerPermLevel.Admin
40+
: HasRole(Program.cfgjson.ModRole) ? ServerPermLevel.Moderator
41+
: HasRole(Program.cfgjson.MutedRole) ? ServerPermLevel.Muted
42+
: HasRole(Program.cfgjson.TrialModRole) ? ServerPermLevel.TrialModerator
43+
: HasRole(Program.cfgjson.TqsRoleId) ? ServerPermLevel.TechnicalQueriesSlayer
44+
: HasRole(Program.cfgjson.TierRoles[9]) ? ServerPermLevel.TierX
45+
: HasRole(Program.cfgjson.TierRoles[8]) ? ServerPermLevel.TierS
46+
: HasRole(Program.cfgjson.TierRoles[7]) ? ServerPermLevel.Tier8
47+
: HasRole(Program.cfgjson.TierRoles[6]) ? ServerPermLevel.Tier7
48+
: HasRole(Program.cfgjson.TierRoles[5]) ? ServerPermLevel.Tier6
49+
: HasRole(Program.cfgjson.TierRoles[4]) ? ServerPermLevel.Tier5
50+
: HasRole(Program.cfgjson.TierRoles[3]) ? ServerPermLevel.Tier4
51+
: HasRole(Program.cfgjson.TierRoles[2]) ? ServerPermLevel.Tier3
52+
: HasRole(Program.cfgjson.TierRoles[1]) ? ServerPermLevel.Tier2
53+
: HasRole(Program.cfgjson.TierRoles[0]) ? ServerPermLevel.Tier1
54+
: ServerPermLevel.Nothing;
6655
}
6756

6857
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = false)]

Commands/BanCmds.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,10 +427,16 @@ public async Task EditBanCmd(TextCommandContext ctx,
427427

428428
if (contextMessage is not null)
429429
{
430+
string newCtxMsg;
430431
if (banDuration == default)
431-
await contextMessage.ModifyAsync($"{Program.cfgjson.Emoji.Banned} {targetUser.Mention} has been banned: **{reason}**");
432+
newCtxMsg = $"{Program.cfgjson.Emoji.Banned} {targetUser.Mention} has been banned: **{reason}**";
432433
else
433-
await contextMessage.ModifyAsync($"{Program.cfgjson.Emoji.Banned} {targetUser.Mention} has been banned for **{TimeHelpers.TimeToPrettyFormat(banDuration, false)}**: **{reason}**");
434+
newCtxMsg = $"{Program.cfgjson.Emoji.Banned} {targetUser.Mention} has been banned for **{TimeHelpers.TimeToPrettyFormat(banDuration, false)}**: **{reason}**";
435+
436+
if (contextMessage.Content.Contains("-# This user's messages have been kept."))
437+
newCtxMsg += "\n-# This user's messages have been kept.";
438+
439+
await contextMessage.ModifyAsync(newCtxMsg);
434440
}
435441

436442
if (dmMessage is not null)

Commands/DebugCmds.cs

Lines changed: 58 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using Cliptok.Helpers;
12
using Microsoft.EntityFrameworkCore;
23

34
namespace Cliptok.Commands
@@ -24,10 +25,11 @@ public async Task LogPrint(TextCommandContext ctx)
2425

2526
using (var dbContext = new CliptokDbContext())
2627
{
27-
var records = (await dbContext.Messages.Include(m => m.User).Include(m => m.Sticker).Include(m => m.User.BulkMessageLogs).OrderByDescending(m => m.Id).Take(100).ToListAsync());
28-
var json = JsonConvert.SerializeObject(records, Formatting.Indented);
28+
var records = (await dbContext.Messages.Include(m => m.User).Include(m => m.Sticker).OrderByDescending(m => m.Id).Take(100).ToListAsync());
29+
var stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(records, Formatting.Indented)));
2930
await ctx.RespondAsync(new DiscordMessageBuilder()
30-
.WithContent($"100 most recent message logs:\n{await StringHelpers.CodeOrHasteBinAsync(json, "json", plain: true)}"));
31+
.WithContent($"100 most recent message logs")
32+
.AddFile("messages.json", stream));
3133
}
3234
}
3335

@@ -65,7 +67,14 @@ public async Task MuteDebug(TextCommandContext ctx, DiscordUser targetUser = def
6567
strOut += $"{entry.Value}\n";
6668
}
6769
}
68-
await ctx.RespondAsync(await StringHelpers.CodeOrHasteBinAsync(strOut, "json"));
70+
var hasteResult = await StringHelpers.CodeOrHasteBinAsync(strOut, "json");
71+
if (hasteResult.Success)
72+
await ctx.RespondAsync(hasteResult.Text);
73+
else
74+
{
75+
var stream = new MemoryStream(Encoding.UTF8.GetBytes(strOut));
76+
await ctx.RespondAsync(new DiscordMessageBuilder().AddFile("mutes.json", stream));
77+
}
6978
}
7079
else // if (targetUser != default)
7180
{
@@ -104,7 +113,16 @@ public async Task BanDebug(TextCommandContext ctx, DiscordUser targetUser = defa
104113
strOut += $"{entry.Value}\n";
105114
}
106115
}
107-
await ctx.RespondAsync(await StringHelpers.CodeOrHasteBinAsync(strOut, "json"));
116+
var haste = await StringHelpers.CodeOrHasteBinAsync(strOut, "json");
117+
if (haste.Success)
118+
await ctx.Channel.SendMessageAsync(haste.Text);
119+
else
120+
{
121+
var stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(strOut, Formatting.Indented)));
122+
await ctx.Channel.SendMessageAsync(new DiscordMessageBuilder()
123+
.AddFile("bans.txt", stream));
124+
}
125+
108126
}
109127
else // if (targetUser != default)
110128
{
@@ -182,7 +200,7 @@ public async Task Shell(TextCommandContext ctx, [RemainingText] string command)
182200
ShellResult finishedShell = RunShellCommand(command);
183201
string result = Regex.Replace(finishedShell.result, "ghp_[0-9a-zA-Z]{36}", "ghp_REDACTED").Replace(Environment.GetEnvironmentVariable("CLIPTOK_TOKEN"), "REDACTED").Replace(Environment.GetEnvironmentVariable("CLIPTOK_ANTIPHISHING_ENDPOINT") ?? "DUMMYVALUE", "REDACTED");
184202

185-
string msgContent = await StringHelpers.CodeOrHasteBinAsync(result, charLimit: 1947);
203+
string msgContent = (await StringHelpers.CodeOrHasteBinAsync(result, charLimit: 1947)).Text;
186204

187205
msgContent += $"\nProcess exited with code `{finishedShell.proc.ExitCode}`.";
188206

@@ -264,8 +282,15 @@ public async Task CheckPendingChannelEvents(TextCommandContext ctx)
264282
}
265283
list += "```\n";
266284
}
267-
268-
await ctx.RespondAsync(await StringHelpers.CodeOrHasteBinAsync(list));
285+
var haste = await StringHelpers.CodeOrHasteBinAsync(list, "json");
286+
if (haste.Success)
287+
await ctx.Channel.SendMessageAsync(haste.Text);
288+
else
289+
{
290+
var stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(list, Formatting.Indented)));
291+
await ctx.Channel.SendMessageAsync(new DiscordMessageBuilder()
292+
.AddFile("events.txt", stream));
293+
}
269294
}
270295

271296
[Command("dmchannel")]
@@ -286,7 +311,15 @@ public async Task DumpDMChannels(TextCommandContext ctx)
286311

287312
var json = JsonConvert.SerializeObject(dmChannels, Formatting.Indented);
288313

289-
await ctx.RespondAsync(await StringHelpers.CodeOrHasteBinAsync(json, "json"));
314+
var haste = await StringHelpers.CodeOrHasteBinAsync(json, "json");
315+
if (haste.Success)
316+
await ctx.Channel.SendMessageAsync(haste.Text);
317+
else
318+
{
319+
var stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(json, Formatting.Indented)));
320+
await ctx.Channel.SendMessageAsync(new DiscordMessageBuilder()
321+
.AddFile("members.json", stream));
322+
}
290323
}
291324

292325
[Command("searchmembers")]
@@ -305,7 +338,16 @@ public async Task SearchMembersCmd(TextCommandContext ctx, string regex)
305338
Dictionary<ulong, string> memberIdsTonames = matchedMembers.Select(member => new KeyValuePair<ulong, string>(member.Id, member.Username)).ToDictionary(x => x.Key, x => x.Value);
306339

307340
_ = msg.DeleteAsync();
308-
await ctx.Channel.SendMessageAsync(await StringHelpers.CodeOrHasteBinAsync(JsonConvert.SerializeObject(memberIdsTonames, Formatting.Indented), "json"));
341+
var json = JsonConvert.SerializeObject(memberIdsTonames, Formatting.Indented);
342+
var haste = await StringHelpers.CodeOrHasteBinAsync(json, "json");
343+
if (haste.Success)
344+
await ctx.Channel.SendMessageAsync(haste.Text);
345+
else
346+
{
347+
var stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(json, Formatting.Indented)));
348+
await ctx.Channel.SendMessageAsync(new DiscordMessageBuilder()
349+
.AddFile("members.json", stream));
350+
}
309351
}
310352

311353
[Command("testnre")]
@@ -340,7 +382,7 @@ public async Task WarningCacheCmd(TextCommandContext ctx)
340382
await ctx.RespondAsync("No cached warning found.");
341383
return;
342384
}
343-
await ctx.RespondAsync(await StringHelpers.CodeOrHasteBinAsync(JsonConvert.SerializeObject(WarningHelpers.mostRecentWarning, Formatting.Indented), "json"));
385+
await ctx.RespondAsync((await StringHelpers.CodeOrHasteBinAsync(JsonConvert.SerializeObject(WarningHelpers.mostRecentWarning, Formatting.Indented), "json")).Text);
344386
}
345387

346388
[Command("bancache")]
@@ -352,7 +394,7 @@ public async Task BanCacheCmd(TextCommandContext ctx)
352394
await ctx.RespondAsync("No cached ban found.");
353395
return;
354396
}
355-
await ctx.RespondAsync(await StringHelpers.CodeOrHasteBinAsync(JsonConvert.SerializeObject(BanHelpers.MostRecentBan, Formatting.Indented), "json"));
397+
await ctx.RespondAsync((await StringHelpers.CodeOrHasteBinAsync(JsonConvert.SerializeObject(BanHelpers.MostRecentBan, Formatting.Indented), "json")).Text);
356398
}
357399

358400

@@ -365,7 +407,7 @@ public async Task MuteCacheCmd(TextCommandContext ctx)
365407
await ctx.RespondAsync("No cached mute found.");
366408
return;
367409
}
368-
await ctx.RespondAsync(await StringHelpers.CodeOrHasteBinAsync(JsonConvert.SerializeObject(MuteHelpers.MostRecentMute, Formatting.Indented), "json"));
410+
await ctx.RespondAsync((await StringHelpers.CodeOrHasteBinAsync(JsonConvert.SerializeObject(MuteHelpers.MostRecentMute, Formatting.Indented), "json")).Text);
369411
}
370412

371413
}
@@ -424,7 +466,7 @@ await ctx.RespondAsync(
424466
if (response.Length > 2000)
425467
{
426468
// I am abusing my own helper here. I know for a fact that it will be over the char limit so I know it won't return a code block.
427-
await ctx.RespondAsync(await StringHelpers.CodeOrHasteBinAsync(response));
469+
await ctx.RespondAsync((await StringHelpers.CodeOrHasteBinAsync(response)).Text);
428470
}
429471
else
430472
{
@@ -633,7 +675,7 @@ public async Task DumpFromDiscord(TextCommandContext ctx,
633675
output += $"{JsonConvert.SerializeObject(overwrite)}\n";
634676
}
635677

636-
await ctx.RespondAsync($"Dump from Discord:\n{await StringHelpers.CodeOrHasteBinAsync(output, "json")}");
678+
await ctx.RespondAsync($"Dump from Discord:\n{(await StringHelpers.CodeOrHasteBinAsync(output, "json")).Text}");
637679
}
638680

639681
[Command("db")]
@@ -676,7 +718,7 @@ public async Task DumpFromDb(TextCommandContext ctx,
676718
output += $"{JsonConvert.SerializeObject(overwrite)}\n";
677719
}
678720

679-
await ctx.RespondAsync($"Dump from db:\n{await StringHelpers.CodeOrHasteBinAsync(output, "json")}");
721+
await ctx.RespondAsync($"Dump from db:\n{(await StringHelpers.CodeOrHasteBinAsync(output, "json")).Text}");
680722
}
681723
}
682724

Commands/UtilityCmds.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class UtilityCmds
1111
public async Task DumpMessage(MessageCommandContext ctx, DiscordMessage targetMessage)
1212
{
1313
var rawMsgData = JsonConvert.SerializeObject(targetMessage, Formatting.Indented);
14-
await ctx.RespondAsync(await StringHelpers.CodeOrHasteBinAsync(rawMsgData, "json"), ephemeral: true);
14+
await ctx.RespondAsync((await StringHelpers.CodeOrHasteBinAsync(rawMsgData, "json")).Text, ephemeral: true);
1515
}
1616

1717
[Command("Show Avatar")]
@@ -218,7 +218,7 @@ await LogChannelHelper.LogMessageAsync("secret",
218218
stringRespBuilder.Append($"- [{TimeHelpers.TimeToPrettyFormat(DateTime.UtcNow - log.CreatedAt)}]({log.PasteUrl}) ({log.DiscordUrl})\n");
219219
}
220220

221-
await ctx.RespondAsync(new DiscordEmbedBuilder().WithAuthor($"Bulk logs containing {user.GlobalName ?? user.Username}", null, user.AvatarUrl).WithDescription(await StringHelpers.CodeOrHasteBinAsync(stringRespBuilder.ToString(), "md", 4000, false, true, false, $"## Bulk logs containing {user.GlobalName ?? user.Username}\n\n")).WithFooter($"User ID: {user.Id}"));
221+
await ctx.RespondAsync(new DiscordEmbedBuilder().WithAuthor($"Bulk logs containing {user.GlobalName ?? user.Username}", null, user.AvatarUrl).WithDescription((await StringHelpers.CodeOrHasteBinAsync(stringRespBuilder.ToString(), "md", 4000, false, true, false, $"## Bulk logs containing {user.GlobalName ?? user.Username}\n\n")).Text).WithFooter($"User ID: {user.Id}"));
222222
}
223223
}
224224
}

0 commit comments

Comments
 (0)