2023-10-18 09:01:24 +00:00
|
|
|
|
using ArgsUniform;
|
2023-10-22 08:38:46 +00:00
|
|
|
|
using BiblioTech.Commands;
|
2024-02-19 13:56:49 +00:00
|
|
|
|
using BiblioTech.Rewards;
|
2023-10-18 09:01:24 +00:00
|
|
|
|
using Discord;
|
2023-10-18 07:10:04 +00:00
|
|
|
|
using Discord.WebSocket;
|
2024-04-07 12:04:31 +00:00
|
|
|
|
using DiscordRewards;
|
2023-12-18 10:27:28 +00:00
|
|
|
|
using Logging;
|
2023-10-18 07:10:04 +00:00
|
|
|
|
|
2023-10-18 09:01:24 +00:00
|
|
|
|
namespace BiblioTech
|
2023-10-18 06:57:59 +00:00
|
|
|
|
{
|
2023-10-18 09:01:24 +00:00
|
|
|
|
public class Program
|
|
|
|
|
{
|
|
|
|
|
private DiscordSocketClient client = null!;
|
2024-06-27 09:16:17 +00:00
|
|
|
|
private readonly CustomReplacement replacement = new CustomReplacement();
|
2023-10-18 07:10:04 +00:00
|
|
|
|
|
2023-10-18 09:01:24 +00:00
|
|
|
|
public static Configuration Config { get; private set; } = null!;
|
2023-10-22 07:32:03 +00:00
|
|
|
|
public static UserRepo UserRepo { get; } = new UserRepo();
|
2023-12-18 10:27:28 +00:00
|
|
|
|
public static AdminChecker AdminChecker { get; private set; } = null!;
|
2024-02-19 13:56:49 +00:00
|
|
|
|
public static IDiscordRoleDriver RoleDriver { get; set; } = null!;
|
2023-12-18 10:27:28 +00:00
|
|
|
|
public static ILog Log { get; private set; } = null!;
|
2024-04-07 12:04:31 +00:00
|
|
|
|
public static MarketAverage[] Averages { get; set; } = Array.Empty<MarketAverage>();
|
2023-10-18 07:10:04 +00:00
|
|
|
|
|
2023-10-18 09:01:24 +00:00
|
|
|
|
public static Task Main(string[] args)
|
|
|
|
|
{
|
2024-05-16 09:54:31 +00:00
|
|
|
|
Log = new ConsoleLog();
|
|
|
|
|
|
2023-10-18 09:01:24 +00:00
|
|
|
|
var uniformArgs = new ArgsUniform<Configuration>(PrintHelp, args);
|
2023-10-18 09:21:06 +00:00
|
|
|
|
Config = uniformArgs.Parse();
|
2023-10-18 07:10:04 +00:00
|
|
|
|
|
2023-12-18 10:27:28 +00:00
|
|
|
|
Log = new LogSplitter(
|
2024-01-22 09:27:07 +00:00
|
|
|
|
new FileLog(Path.Combine(Config.LogPath, "discordbot")),
|
2023-12-18 10:27:28 +00:00
|
|
|
|
new ConsoleLog()
|
|
|
|
|
);
|
|
|
|
|
|
2023-10-25 09:53:33 +00:00
|
|
|
|
EnsurePath(Config.DataPath);
|
|
|
|
|
EnsurePath(Config.UserDataPath);
|
|
|
|
|
EnsurePath(Config.EndpointsPath);
|
2023-10-22 09:10:45 +00:00
|
|
|
|
|
2024-02-19 13:56:49 +00:00
|
|
|
|
return new Program().MainAsync(args);
|
2023-10-18 09:01:24 +00:00
|
|
|
|
}
|
2023-10-18 06:57:59 +00:00
|
|
|
|
|
2024-02-19 13:56:49 +00:00
|
|
|
|
public async Task MainAsync(string[] args)
|
2023-10-18 09:01:24 +00:00
|
|
|
|
{
|
2023-12-18 10:27:28 +00:00
|
|
|
|
Log.Log("Starting Codex Discord Bot...");
|
2024-05-16 14:00:19 +00:00
|
|
|
|
if (Config.DebugNoDiscord)
|
|
|
|
|
{
|
|
|
|
|
Log.Log("Debug option is set. Discord connection disabled!");
|
|
|
|
|
RoleDriver = new LoggingRoleDriver(Log);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
await StartDiscordBot();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
|
builder.WebHost.ConfigureKestrel((context, options) =>
|
|
|
|
|
{
|
|
|
|
|
options.ListenAnyIP(Config.RewardApiPort);
|
|
|
|
|
});
|
|
|
|
|
builder.Services.AddControllers();
|
|
|
|
|
var app = builder.Build();
|
|
|
|
|
app.MapControllers();
|
|
|
|
|
|
|
|
|
|
Log.Log("Running...");
|
|
|
|
|
await app.RunAsync();
|
|
|
|
|
await Task.Delay(-1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async Task StartDiscordBot()
|
|
|
|
|
{
|
2023-10-18 09:01:24 +00:00
|
|
|
|
client = new DiscordSocketClient();
|
2023-12-18 10:27:28 +00:00
|
|
|
|
client.Log += ClientLog;
|
2023-10-18 09:01:24 +00:00
|
|
|
|
|
2024-01-22 09:27:07 +00:00
|
|
|
|
var notifyCommand = new NotifyCommand();
|
|
|
|
|
var associateCommand = new UserAssociateCommand(notifyCommand);
|
2023-11-21 08:38:58 +00:00
|
|
|
|
var sprCommand = new SprCommand();
|
2024-06-27 09:16:17 +00:00
|
|
|
|
var handler = new CommandHandler(Log, client, replacement,
|
2024-05-16 14:00:19 +00:00
|
|
|
|
new GetBalanceCommand(associateCommand),
|
2023-12-11 10:01:12 +00:00
|
|
|
|
new MintCommand(associateCommand),
|
2023-11-21 08:38:58 +00:00
|
|
|
|
sprCommand,
|
2023-10-22 08:38:46 +00:00
|
|
|
|
associateCommand,
|
2024-01-22 09:27:07 +00:00
|
|
|
|
notifyCommand,
|
2024-06-27 09:16:17 +00:00
|
|
|
|
new AdminCommand(sprCommand, replacement),
|
2024-04-07 12:04:31 +00:00
|
|
|
|
new MarketCommand()
|
2023-10-20 09:20:38 +00:00
|
|
|
|
);
|
2023-10-18 09:01:24 +00:00
|
|
|
|
|
2023-10-18 11:48:15 +00:00
|
|
|
|
await client.LoginAsync(TokenType.Bot, Config.ApplicationToken);
|
2023-10-18 09:01:24 +00:00
|
|
|
|
await client.StartAsync();
|
2023-12-18 10:27:28 +00:00
|
|
|
|
AdminChecker = new AdminChecker();
|
2023-10-18 09:01:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void PrintHelp()
|
|
|
|
|
{
|
2023-12-18 10:27:28 +00:00
|
|
|
|
Log.Log("BiblioTech - Codex Discord Bot");
|
2023-10-18 09:01:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-12-18 10:27:28 +00:00
|
|
|
|
private Task ClientLog(LogMessage msg)
|
2023-10-18 09:01:24 +00:00
|
|
|
|
{
|
2023-12-18 10:27:28 +00:00
|
|
|
|
Log.Log("DiscordClient: " + msg.ToString());
|
2023-10-18 09:01:24 +00:00
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
}
|
2023-10-25 09:53:33 +00:00
|
|
|
|
|
|
|
|
|
private static void EnsurePath(string path)
|
|
|
|
|
{
|
|
|
|
|
if (Directory.Exists(path)) return;
|
|
|
|
|
Directory.CreateDirectory(path);
|
|
|
|
|
}
|
2023-10-18 06:57:59 +00:00
|
|
|
|
}
|
2023-10-18 09:01:24 +00:00
|
|
|
|
}
|