mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2025-09-10 09:18:27 -04:00
Gambling moved to a separate project. Project builds
This commit is contained in:
@@ -35,13 +35,13 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nadeko.Common", "src\Nadeko
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nadeko.Econ", "src\Nadeko.Econ\Nadeko.Econ.csproj", "{4F4FBF7C-74F0-4AE4-B451-9E60BDCA9C37}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NadekoBot.Modules.Expresssions", "src\NadekoBot.Modules.Expresssions\NadekoBot.Modules.Expresssions.csproj", "{92E239B9-C230-4475-9506-BED20174FD20}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nadeko.Bot.Modules.Expresssions", "src\Nadeko.Bot.Modules.Expresssions\Nadeko.Bot.Modules.Expresssions.csproj", "{92E239B9-C230-4475-9506-BED20174FD20}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nadeko.Bot.Db", "src\Nadeko.Bot.Db\Nadeko.Bot.Db.csproj", "{02499E3E-3B04-4BC8-9B3C-D9494661F78E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nadeko.Bot.Common", "src\Nadeko.Bot.Common\Nadeko.Bot.Common.csproj", "{02ABC10E-3323-4698-A388-C61D7D03797E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nadeko.Bot.Generators.Cloneable", "src\Nadeko.Bot.Generators.Cloneable\Nadeko.Bot.Generators.Cloneable.csproj", "{A5E71EE3-786E-438C-95C0-5BC558FCECCF}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nadeko.Bot.Modules.Gambling", "src\Nadeko.Bot.Modules.Gambling\Nadeko.Bot.Modules.Gambling.csproj", "{5F4F36A5-5874-4461-BB34-EE107E4B7F15}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -122,12 +122,12 @@ Global
|
||||
{02ABC10E-3323-4698-A388-C61D7D03797E}.GlobalNadeko|Any CPU.Build.0 = Debug|Any CPU
|
||||
{02ABC10E-3323-4698-A388-C61D7D03797E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{02ABC10E-3323-4698-A388-C61D7D03797E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A5E71EE3-786E-438C-95C0-5BC558FCECCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A5E71EE3-786E-438C-95C0-5BC558FCECCF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A5E71EE3-786E-438C-95C0-5BC558FCECCF}.GlobalNadeko|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A5E71EE3-786E-438C-95C0-5BC558FCECCF}.GlobalNadeko|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A5E71EE3-786E-438C-95C0-5BC558FCECCF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A5E71EE3-786E-438C-95C0-5BC558FCECCF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5F4F36A5-5874-4461-BB34-EE107E4B7F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5F4F36A5-5874-4461-BB34-EE107E4B7F15}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5F4F36A5-5874-4461-BB34-EE107E4B7F15}.GlobalNadeko|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5F4F36A5-5874-4461-BB34-EE107E4B7F15}.GlobalNadeko|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5F4F36A5-5874-4461-BB34-EE107E4B7F15}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5F4F36A5-5874-4461-BB34-EE107E4B7F15}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -146,7 +146,7 @@ Global
|
||||
{92E239B9-C230-4475-9506-BED20174FD20} = {04929013-5BAB-42B0-B9B2-8F2BB8F16AF2}
|
||||
{02499E3E-3B04-4BC8-9B3C-D9494661F78E} = {04929013-5BAB-42B0-B9B2-8F2BB8F16AF2}
|
||||
{02ABC10E-3323-4698-A388-C61D7D03797E} = {04929013-5BAB-42B0-B9B2-8F2BB8F16AF2}
|
||||
{A5E71EE3-786E-438C-95C0-5BC558FCECCF} = {04929013-5BAB-42B0-B9B2-8F2BB8F16AF2}
|
||||
{5F4F36A5-5874-4461-BB34-EE107E4B7F15} = {04929013-5BAB-42B0-B9B2-8F2BB8F16AF2}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {5F3F555C-855F-4BE8-B526-D062D3E8ACA4}
|
||||
|
@@ -1,4 +1,6 @@
|
||||
#nullable disable
|
||||
using NadekoBot.Common;
|
||||
|
||||
namespace NadekoBot;
|
||||
|
||||
public interface IBotCredentials
|
||||
@@ -9,14 +11,14 @@ public interface IBotCredentials
|
||||
bool UsePrivilegedIntents { get; }
|
||||
string RapidApiKey { get; }
|
||||
|
||||
IDbOptions Db { get; }
|
||||
Creds.DbOptions Db { get; }
|
||||
string OsuApiKey { get; }
|
||||
int TotalShards { get; }
|
||||
IPatreonSettings Patreon { get; }
|
||||
Creds.PatreonSettings Patreon { get; }
|
||||
string CleverbotApiKey { get; }
|
||||
string Gpt3ApiKey { get; }
|
||||
IRestartConfig RestartCommand { get; }
|
||||
IVotesSettings Votes { get; }
|
||||
RestartConfig RestartCommand { get; }
|
||||
Creds.VotesSettings Votes { get; }
|
||||
string BotListToken { get; }
|
||||
string RedisOptions { get; }
|
||||
string LocationIqApiKey { get; }
|
||||
@@ -26,7 +28,7 @@ public interface IBotCredentials
|
||||
string CoordinatorUrl { get; set; }
|
||||
string TwitchClientId { get; set; }
|
||||
string TwitchClientSecret { get; set; }
|
||||
IGoogleApiConfig Google { get; set; }
|
||||
GoogleApiConfig Google { get; set; }
|
||||
BotCacheImplemenation BotCache { get; set; }
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,4 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using NadekoBot.Modules.Administration.Services;
|
||||
|
||||
namespace Discord;
|
||||
|
||||
@@ -21,7 +20,7 @@ public class UserPermAttribute : RequireUserPermissionAttribute
|
||||
CommandInfo command,
|
||||
IServiceProvider services)
|
||||
{
|
||||
var permService = services.GetRequiredService<DiscordPermOverrideService>();
|
||||
var permService = services.GetRequiredService<IDiscordPermOverrideService>();
|
||||
if (permService.TryGetOverrides(context.Guild?.Id ?? 0, command.Name.ToUpperInvariant(), out _))
|
||||
return Task.FromResult(PreconditionResult.FromSuccess());
|
||||
|
@@ -1,12 +1,14 @@
|
||||
#nullable disable
|
||||
using NadekoBot.Services;
|
||||
|
||||
namespace NadekoBot.Common.TypeReaders;
|
||||
|
||||
public sealed class CommandTypeReader : NadekoTypeReader<CommandInfo>
|
||||
{
|
||||
private readonly CommandService _cmds;
|
||||
private readonly CommandHandler _handler;
|
||||
private readonly ICommandHandler _handler;
|
||||
|
||||
public CommandTypeReader(CommandHandler handler, CommandService cmds)
|
||||
public CommandTypeReader(ICommandHandler handler, CommandService cmds)
|
||||
{
|
||||
_handler = handler;
|
||||
_cmds = cmds;
|
@@ -1,33 +1,33 @@
|
||||
namespace NadekoBot.Common.TypeReaders;
|
||||
|
||||
public sealed class GuildUserTypeReader : NadekoTypeReader<IGuildUser>
|
||||
{
|
||||
public override async ValueTask<TypeReaderResult<IGuildUser>> ReadAsync(ICommandContext ctx, string input)
|
||||
{
|
||||
if (ctx.Guild is null)
|
||||
return TypeReaderResult.FromError<IGuildUser>(CommandError.Unsuccessful, "Must be in a guild.");
|
||||
|
||||
input = input.Trim();
|
||||
IGuildUser? user = null;
|
||||
if (MentionUtils.TryParseUser(input, out var id))
|
||||
user = await ctx.Guild.GetUserAsync(id, CacheMode.AllowDownload);
|
||||
|
||||
if (ulong.TryParse(input, out id))
|
||||
user = await ctx.Guild.GetUserAsync(id, CacheMode.AllowDownload);
|
||||
|
||||
if (user is null)
|
||||
{
|
||||
var users = await ctx.Guild.GetUsersAsync(CacheMode.CacheOnly);
|
||||
user = users.FirstOrDefault(x => x.Username == input)
|
||||
?? users.FirstOrDefault(x =>
|
||||
string.Equals(x.ToString(), input, StringComparison.InvariantCultureIgnoreCase))
|
||||
?? users.FirstOrDefault(x =>
|
||||
string.Equals(x.Username, input, StringComparison.InvariantCultureIgnoreCase));
|
||||
}
|
||||
|
||||
if (user is null)
|
||||
return TypeReaderResult.FromError<IGuildUser>(CommandError.ObjectNotFound, "User not found.");
|
||||
|
||||
return TypeReaderResult.FromSuccess(user);
|
||||
}
|
||||
namespace NadekoBot.Common.TypeReaders;
|
||||
|
||||
public sealed class GuildUserTypeReader : NadekoTypeReader<IGuildUser>
|
||||
{
|
||||
public override async ValueTask<TypeReaderResult<IGuildUser>> ReadAsync(ICommandContext ctx, string input)
|
||||
{
|
||||
if (ctx.Guild is null)
|
||||
return TypeReaderResult.FromError<IGuildUser>(CommandError.Unsuccessful, "Must be in a guild.");
|
||||
|
||||
input = input.Trim();
|
||||
IGuildUser? user = null;
|
||||
if (MentionUtils.TryParseUser(input, out var id))
|
||||
user = await ctx.Guild.GetUserAsync(id, CacheMode.AllowDownload);
|
||||
|
||||
if (ulong.TryParse(input, out id))
|
||||
user = await ctx.Guild.GetUserAsync(id, CacheMode.AllowDownload);
|
||||
|
||||
if (user is null)
|
||||
{
|
||||
var users = await ctx.Guild.GetUsersAsync(CacheMode.CacheOnly);
|
||||
user = users.FirstOrDefault(x => x.Username == input)
|
||||
?? users.FirstOrDefault(x =>
|
||||
string.Equals(x.ToString(), input, StringComparison.InvariantCultureIgnoreCase))
|
||||
?? users.FirstOrDefault(x =>
|
||||
string.Equals(x.Username, input, StringComparison.InvariantCultureIgnoreCase));
|
||||
}
|
||||
|
||||
if (user is null)
|
||||
return TypeReaderResult.FromError<IGuildUser>(CommandError.ObjectNotFound, "User not found.");
|
||||
|
||||
return TypeReaderResult.FromSuccess(user);
|
||||
}
|
||||
}
|
@@ -47,16 +47,16 @@ public sealed class Creds : IBotCredentials
|
||||
|
||||
Do all steps again but enable image search for the ImageSearchId
|
||||
""")]
|
||||
public IGoogleApiConfig Google { get; set; }
|
||||
public GoogleApiConfig Google { get; set; }
|
||||
|
||||
[Comment("""Settings for voting system for discordbots. Meant for use on global Nadeko.""")]
|
||||
public IVotesSettings Votes { get; set; }
|
||||
public VotesSettings Votes { get; set; }
|
||||
|
||||
[Comment("""
|
||||
Patreon auto reward system settings.
|
||||
go to https://www.patreon.com/portal -> my clients -> create client
|
||||
""")]
|
||||
public IPatreonSettings Patreon { get; set; }
|
||||
public PatreonSettings Patreon { get; set; }
|
||||
|
||||
[Comment("""Api key for sending stats to DiscordBotList.""")]
|
||||
public string BotListToken { get; set; }
|
||||
@@ -81,7 +81,7 @@ public sealed class Creds : IBotCredentials
|
||||
public string RedisOptions { get; set; }
|
||||
|
||||
[Comment("""Database options. Don't change if you don't know what you're doing. Leave null for default values""")]
|
||||
public IDbOptions Db { get; set; }
|
||||
public DbOptions Db { get; set; }
|
||||
|
||||
[Comment("""
|
||||
Address and port of the coordinator endpoint. Leave empty for default.
|
||||
@@ -143,7 +143,7 @@ public sealed class Creds : IBotCredentials
|
||||
cmd: NadekoBot.exe
|
||||
args: "{0}"
|
||||
""")]
|
||||
public IRestartConfig RestartCommand { get; set; }
|
||||
public RestartConfig RestartCommand { get; set; }
|
||||
|
||||
public Creds()
|
||||
{
|
@@ -1,16 +1,16 @@
|
||||
// // global using System.Collections.Concurrent;
|
||||
// global using NonBlocking;
|
||||
global using NonBlocking;
|
||||
//
|
||||
// // packages
|
||||
// global using Serilog;
|
||||
global using Humanizer;
|
||||
//
|
||||
// // nadekobot
|
||||
// global using NadekoBot;
|
||||
// global using NadekoBot.Services;
|
||||
global using NadekoBot;
|
||||
global using NadekoBot.Services;
|
||||
global using Nadeko.Common; // new project
|
||||
// global using NadekoBot.Common; // old + nadekobot specific things
|
||||
// global using NadekoBot.Common.Attributes;
|
||||
global using NadekoBot.Common; // old + nadekobot specific things
|
||||
global using NadekoBot.Common.Attributes;
|
||||
global using NadekoBot.Extensions;
|
||||
// global using Nadeko.Snake;
|
||||
|
||||
@@ -28,4 +28,7 @@ global using LeftoverAttribute = Discord.Commands.RemainderAttribute;
|
||||
// global using TypeReaderResult = NadekoBot.Common.TypeReaders.TypeReaderResult;
|
||||
|
||||
// non-essential
|
||||
global using JetBrains.Annotations;
|
||||
global using JetBrains.Annotations;
|
||||
|
||||
|
||||
global using Serilog;
|
12
src/Nadeko.Bot.Common/IBot.cs
Normal file
12
src/Nadeko.Bot.Common/IBot.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
#nullable disable
|
||||
using NadekoBot.Services.Database.Models;
|
||||
|
||||
namespace NadekoBot;
|
||||
|
||||
public interface IBot
|
||||
{
|
||||
IReadOnlyList<ulong> GetCurrentGuildIds();
|
||||
event Func<GuildConfig, Task> JoinedGuild;
|
||||
IReadOnlyCollection<GuildConfig> AllGuildConfigs { get; }
|
||||
bool IsReady { get; }
|
||||
}
|
6
src/Nadeko.Bot.Common/ICurrencyProvider.cs
Normal file
6
src/Nadeko.Bot.Common/ICurrencyProvider.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace Nadeko.Bot.Common;
|
||||
|
||||
public interface ICurrencyProvider
|
||||
{
|
||||
string GetCurrencySign();
|
||||
}
|
7
src/Nadeko.Bot.Common/IDiscordPermOverrideService.cs
Normal file
7
src/Nadeko.Bot.Common/IDiscordPermOverrideService.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
#nullable disable
|
||||
namespace Nadeko.Common;
|
||||
|
||||
public interface IDiscordPermOverrideService
|
||||
{
|
||||
bool TryGetOverrides(ulong guildId, string commandName, out Nadeko.Bot.Db.GuildPerm? perm);
|
||||
}
|
15
src/Nadeko.Bot.Common/IPermissionChecker.cs
Normal file
15
src/Nadeko.Bot.Common/IPermissionChecker.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using NadekoBot;
|
||||
using NadekoBot.Services;
|
||||
using OneOf;
|
||||
using OneOf.Types;
|
||||
|
||||
namespace Nadeko.Bot.Common;
|
||||
|
||||
public interface IPermissionChecker
|
||||
{
|
||||
Task<OneOf<Success, Error<LocStr>>> CheckAsync(IGuild guild,
|
||||
IMessageChannel channel,
|
||||
IUser author,
|
||||
string module,
|
||||
string cmd);
|
||||
}
|
@@ -15,10 +15,12 @@
|
||||
<ProjectReference Include="..\Nadeko.Bot.Db\Nadeko.Bot.Db.csproj" />
|
||||
<ProjectReference Include="..\Nadeko.Common\Nadeko.Common.csproj" />
|
||||
<PackageReference Include="JetBrains.Annotations" Version="2022.3.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="7.0.0" />
|
||||
<PackageReference Include="SixLabors.Fonts" Version="1.0.0-beta17" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="2.1.3" />
|
||||
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta14" />
|
||||
<PackageReference Include="SixLabors.Shapes" Version="1.0.0-beta0009" />
|
||||
<PackageReference Include="CommandLineParser" Version="2.9.1" />
|
||||
<PackageReference Include="Humanizer" Version="2.14.1">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<Publish>True</Publish>
|
||||
@@ -29,9 +31,6 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="data\**\*">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<AdditionalFiles Include="data\strings\responses\responses.en-US.json" />
|
||||
<AdditionalFiles Include="..\NadekoBot\data\strings\responses\responses.en-US.json" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
7
src/Nadeko.Bot.Common/Patronage/FeatureLimitKey.cs
Normal file
7
src/Nadeko.Bot.Common/Patronage/FeatureLimitKey.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace NadekoBot.Modules.Utility.Patronage;
|
||||
|
||||
public readonly struct FeatureLimitKey
|
||||
{
|
||||
public string PrettyName { get; init; }
|
||||
public string Key { get; init; }
|
||||
}
|
@@ -2,12 +2,6 @@
|
||||
|
||||
public static class PatronExtensions
|
||||
{
|
||||
public static DateOnly ToDateOnly(this DateTime dateTime)
|
||||
=> DateOnly.FromDateTime(dateTime);
|
||||
|
||||
public static bool IsBeforeToday(this DateTime date)
|
||||
=> date < DateTime.UtcNow.Date;
|
||||
|
||||
public static string ToFullName(this PatronTier tier)
|
||||
=> tier switch
|
||||
{
|
@@ -24,7 +24,7 @@ public class CommandHandler : INService, IReadyExecutor, ICommandHandler
|
||||
private readonly DiscordSocketClient _client;
|
||||
private readonly CommandService _commandService;
|
||||
private readonly BotConfigService _bss;
|
||||
private readonly Bot _bot;
|
||||
private readonly IBot _bot;
|
||||
private readonly IBehaviorHandler _behaviorHandler;
|
||||
private readonly IServiceProvider _services;
|
||||
|
||||
@@ -38,7 +38,7 @@ public class CommandHandler : INService, IReadyExecutor, ICommandHandler
|
||||
DbService db,
|
||||
CommandService commandService,
|
||||
BotConfigService bss,
|
||||
Bot bot,
|
||||
IBot bot,
|
||||
IBehaviorHandler behaviorHandler,
|
||||
// InteractionService interactions,
|
||||
IServiceProvider services)
|
12
src/Nadeko.Bot.Common/Services/IRemindService.cs
Normal file
12
src/Nadeko.Bot.Common/Services/IRemindService.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
#nullable disable
|
||||
namespace NadekoBot.Modules.Utility.Services;
|
||||
|
||||
public interface IRemindService
|
||||
{
|
||||
Task AddReminderAsync(ulong userId,
|
||||
ulong targetId,
|
||||
ulong? guildId,
|
||||
bool isPrivate,
|
||||
DateTime time,
|
||||
string message);
|
||||
}
|
@@ -13,11 +13,6 @@ public interface IStatsService
|
||||
/// </summary>
|
||||
long CommandsRan { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The Discord framework used by the bot.
|
||||
/// </summary>
|
||||
string Library { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The amount of messages seen by the bot since startup.
|
||||
/// </summary>
|
||||
|
17
src/Nadeko.Bot.Common/Services/Impl/IImageCache.cs
Normal file
17
src/Nadeko.Bot.Common/Services/Impl/IImageCache.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
namespace NadekoBot.Services;
|
||||
|
||||
public interface IImageCache
|
||||
{
|
||||
Task<byte[]?> GetHeadsImageAsync();
|
||||
Task<byte[]?> GetTailsImageAsync();
|
||||
Task<byte[]?> GetCurrencyImageAsync();
|
||||
Task<byte[]?> GetXpBackgroundImageAsync();
|
||||
Task<byte[]?> GetRategirlBgAsync();
|
||||
Task<byte[]?> GetRategirlDotAsync();
|
||||
Task<byte[]?> GetDiceAsync(int num);
|
||||
Task<byte[]?> GetSlotEmojiAsync(int number);
|
||||
Task<byte[]?> GetSlotBgAsync();
|
||||
Task<byte[]?> GetRipBgAsync();
|
||||
Task<byte[]?> GetRipOverlayAsync();
|
||||
Task<byte[]?> GetImageDataAsync(Uri url);
|
||||
}
|
19
src/Nadeko.Bot.Common/Services/Impl/ImagesConfig.cs
Normal file
19
src/Nadeko.Bot.Common/Services/Impl/ImagesConfig.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using NadekoBot.Common.Configs;
|
||||
|
||||
namespace NadekoBot.Services;
|
||||
|
||||
public sealed class ImagesConfig : ConfigServiceBase<ImageUrls>
|
||||
{
|
||||
private const string PATH = "data/images.yml";
|
||||
|
||||
private static readonly TypedKey<ImageUrls> _changeKey =
|
||||
new("config.images.updated");
|
||||
|
||||
public override string Name
|
||||
=> "images";
|
||||
|
||||
public ImagesConfig(IConfigSeria serializer, IPubSub pubSub)
|
||||
: base(PATH, serializer, pubSub, _changeKey)
|
||||
{
|
||||
}
|
||||
}
|
@@ -11,6 +11,12 @@ namespace NadekoBot.Extensions;
|
||||
|
||||
public static class Extensions
|
||||
{
|
||||
public static DateOnly ToDateOnly(this DateTime dateTime)
|
||||
=> DateOnly.FromDateTime(dateTime);
|
||||
|
||||
public static bool IsBeforeToday(this DateTime date)
|
||||
=> date < DateTime.UtcNow.Date;
|
||||
|
||||
private static readonly Regex _urlRegex =
|
||||
new(@"^(https?|ftp)://(?<path>[^\s/$.?#].[^\s]*)$", RegexOptions.Compiled);
|
||||
|
||||
@@ -40,7 +46,7 @@ public static class Extensions
|
||||
|
||||
public static ulong[] GetGuildIds(this DiscordSocketClient client)
|
||||
=> client.Guilds
|
||||
.Map(x => x.Id);
|
||||
.Map(x => x.Id);
|
||||
|
||||
/// <summary>
|
||||
/// Generates a string in the format HHH:mm if timespan is >= 2m.
|
||||
@@ -98,7 +104,7 @@ public static class Extensions
|
||||
{
|
||||
description = strings.GetCommandStrings(cmd.Summary, culture).Desc;
|
||||
}
|
||||
|
||||
|
||||
return string.Format(description, prefix);
|
||||
}
|
||||
|
||||
@@ -123,7 +129,7 @@ public static class Extensions
|
||||
{
|
||||
args = strings.GetCommandStrings(cmd.Summary, culture).Args;
|
||||
}
|
||||
|
||||
|
||||
return args.Map(arg => GetFullUsage(cmd.Aliases.First(), arg, prefix));
|
||||
}
|
||||
|
||||
@@ -154,8 +160,13 @@ public static class Extensions
|
||||
if (logService is not null)
|
||||
logService.AddDeleteIgnore(msg.Id);
|
||||
|
||||
try { await msg.DeleteAsync(); }
|
||||
catch { }
|
||||
try
|
||||
{
|
||||
await msg.DeleteAsync();
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
});
|
||||
return msg;
|
||||
}
|
||||
|
@@ -1 +0,0 @@
|
||||
4.3.13
|
@@ -1,115 +0,0 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v6.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v6.0": {
|
||||
"NorthShirahebi/1.0.0": {
|
||||
"dependencies": {
|
||||
"Nadeko.Medusa": "4.3.10"
|
||||
},
|
||||
"runtime": {
|
||||
"NorthShirahebi.dll": {}
|
||||
}
|
||||
},
|
||||
"Discord.Net.Core/3.104.0": {
|
||||
"dependencies": {
|
||||
"Newtonsoft.Json": "13.0.1",
|
||||
"System.Collections.Immutable": "5.0.0",
|
||||
"System.Interactive.Async": "5.0.0",
|
||||
"System.ValueTuple": "4.5.0"
|
||||
}
|
||||
},
|
||||
"Nadeko.Medusa/4.3.10": {
|
||||
"dependencies": {
|
||||
"Discord.Net.Core": "3.104.0",
|
||||
"Serilog": "2.11.0",
|
||||
"YamlDotNet": "11.2.1"
|
||||
}
|
||||
},
|
||||
"Newtonsoft.Json/13.0.1": {},
|
||||
"Serilog/2.11.0": {},
|
||||
"System.Collections.Immutable/5.0.0": {},
|
||||
"System.Interactive.Async/5.0.0": {
|
||||
"dependencies": {
|
||||
"System.Linq.Async": "5.0.0"
|
||||
}
|
||||
},
|
||||
"System.Linq.Async/5.0.0": {},
|
||||
"System.ValueTuple/4.5.0": {},
|
||||
"YamlDotNet/11.2.1": {}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"NorthShirahebi/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Discord.Net.Core/3.104.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-kGCH8WA5C39oLGNb/4+r6M038BKnrxNFyjFZ0YPUiNXPki3CGCugMleSvPjUcUaz7UnvOFA9W8JzgN6KQWbuOQ==",
|
||||
"path": "discord.net.core/3.104.0",
|
||||
"hashPath": "discord.net.core.3.104.0.nupkg.sha512"
|
||||
},
|
||||
"Nadeko.Medusa/4.3.10": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-vwuTD/Gu+6SBU5wG+wnaijcbjkAiYiQK2oTKCiJnP5uqWtLD33pTAoXNkMMu0soQj1hetFVoDUUbMLeg/JLAKg==",
|
||||
"path": "nadeko.medusa/4.3.10",
|
||||
"hashPath": "nadeko.medusa.4.3.10.nupkg.sha512"
|
||||
},
|
||||
"Newtonsoft.Json/13.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||
"path": "newtonsoft.json/13.0.1",
|
||||
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||
},
|
||||
"Serilog/2.11.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ysv+hBzTul6Dp+Hvm10FlhJO3yMQcFKSAleus+LpiIzvNstpeV4Z7gGuIZ1OPNfIMulSHOjmLuGAEDKzpnV8ZQ==",
|
||||
"path": "serilog/2.11.0",
|
||||
"hashPath": "serilog.2.11.0.nupkg.sha512"
|
||||
},
|
||||
"System.Collections.Immutable/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||
"path": "system.collections.immutable/5.0.0",
|
||||
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Interactive.Async/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||
"path": "system.interactive.async/5.0.0",
|
||||
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Linq.Async/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||
"path": "system.linq.async/5.0.0",
|
||||
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.ValueTuple/4.5.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||
"path": "system.valuetuple/4.5.0",
|
||||
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||
},
|
||||
"YamlDotNet/11.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-tBt8K+korVfrjH9wyDEhiLKxbs8qoLCLIFwvYgkSUuMC9//w3z0cFQ8LQAI/5MCKq+BMil0cfRTRvPeE7eXhQw==",
|
||||
"path": "yamldotnet/11.2.1",
|
||||
"hashPath": "yamldotnet.11.2.1.nupkg.sha512"
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net6.0",
|
||||
"rollForward": "LatestMinor",
|
||||
"framework": {
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "6.0.0"
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,70 +0,0 @@
|
||||
hug:
|
||||
desc: "Hug a friend!"
|
||||
args:
|
||||
- ""
|
||||
- "@someone"
|
||||
|
||||
kiss:
|
||||
desc: "K-kiss someone s-special!"
|
||||
args:
|
||||
- ""
|
||||
- "@someone"
|
||||
|
||||
pat:
|
||||
desc: "A good boy deserves pats."
|
||||
args:
|
||||
- ""
|
||||
- "@someone"
|
||||
|
||||
cuddle:
|
||||
desc: "Cuddle your lover. ...Or yourself."
|
||||
args:
|
||||
- ""
|
||||
- "@someone"
|
||||
|
||||
wave:
|
||||
desc: "Greet your friends with a friendly wave."
|
||||
args:
|
||||
- ""
|
||||
- "@someone"
|
||||
|
||||
catgirl:
|
||||
desc: "Spawn a random catgirl!"
|
||||
args:
|
||||
- ""
|
||||
Rain:
|
||||
desc: "Spawn a random image with a rainy scenery."
|
||||
args:
|
||||
- ""
|
||||
Weapon:
|
||||
desc: "Spawn a random image featuring weapon(s)."
|
||||
args:
|
||||
- ""
|
||||
Mountain:
|
||||
desc: "Spawn a random image with a mountainous scenery."
|
||||
args:
|
||||
- ""
|
||||
Swimmingpool:
|
||||
desc: "Spawn a random image featuring a swimming pool(?)."
|
||||
args:
|
||||
- ""
|
||||
Sportswear:
|
||||
desc: "Spawn a random image with one or more characters wearing sportswear."
|
||||
args:
|
||||
- ""
|
||||
Baggyclothes:
|
||||
desc: "Spawn a random image with one or more characters wearing baggy clothes."
|
||||
args:
|
||||
- ""
|
||||
Dress:
|
||||
desc: "Spawn a random image with one or more characters wearing a dress"
|
||||
args:
|
||||
- ""
|
||||
Tree:
|
||||
desc: "Spawn a random image where one or more characters are in a tree."
|
||||
args:
|
||||
- ""
|
||||
Screenshot:
|
||||
desc: "Spawn image of a screenshot of the original source of the image. (ex. Screenshot of an anime scene)"
|
||||
args:
|
||||
- ""
|
@@ -1 +0,0 @@
|
||||
medusa.description: "Images and interactions module - For interacting with members and showing emotions."
|
@@ -1,5 +0,0 @@
|
||||
# DO NOT CHANGE
|
||||
version: 1
|
||||
# List of medusae automatically loaded at startup
|
||||
loaded:
|
||||
- NorthShirahebi
|
@@ -54,7 +54,7 @@ public static class GuildConfigExtensions
|
||||
|
||||
public static IEnumerable<GuildConfig> GetAllGuildConfigs(
|
||||
this DbSet<GuildConfig> configs,
|
||||
List<ulong> availableGuilds)
|
||||
IReadOnlyList<ulong> availableGuilds)
|
||||
=> configs.IncludeEverything().AsNoTracking().Where(x => availableGuilds.Contains(x.GuildId)).ToList();
|
||||
|
||||
/// <summary>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user