2020-01-26 00:27:45 +00:00
|
|
|
using System;
|
|
|
|
using System.Net.Http;
|
|
|
|
|
|
|
|
using Autofac;
|
|
|
|
|
2020-12-22 12:15:26 +00:00
|
|
|
using Myriad.Cache;
|
|
|
|
using Myriad.Gateway;
|
|
|
|
|
2020-06-06 23:30:19 +00:00
|
|
|
using NodaTime;
|
|
|
|
|
2020-02-12 14:16:19 +00:00
|
|
|
using PluralKit.Core;
|
2020-01-26 00:27:45 +00:00
|
|
|
|
|
|
|
using Sentry;
|
|
|
|
|
2020-12-22 12:15:26 +00:00
|
|
|
using Serilog;
|
|
|
|
|
2020-01-26 00:27:45 +00:00
|
|
|
namespace PluralKit.Bot
|
|
|
|
{
|
|
|
|
public class BotModule: Module
|
|
|
|
{
|
|
|
|
protected override void Load(ContainerBuilder builder)
|
|
|
|
{
|
2020-04-24 19:50:28 +00:00
|
|
|
// Clients
|
2021-03-18 08:47:58 +00:00
|
|
|
builder.Register(c =>
|
2020-12-22 12:15:26 +00:00
|
|
|
{
|
2021-03-18 08:47:58 +00:00
|
|
|
var botConfig = c.Resolve<BotConfig>();
|
|
|
|
return new GatewaySettings
|
|
|
|
{
|
|
|
|
Token = botConfig.Token,
|
|
|
|
MaxShardConcurrency = botConfig.MaxShardConcurrency,
|
|
|
|
Intents = GatewayIntent.Guilds |
|
|
|
|
GatewayIntent.DirectMessages |
|
|
|
|
GatewayIntent.DirectMessageReactions |
|
|
|
|
GatewayIntent.GuildEmojis |
|
|
|
|
GatewayIntent.GuildMessages |
|
|
|
|
GatewayIntent.GuildWebhooks |
|
|
|
|
GatewayIntent.GuildMessageReactions
|
|
|
|
};
|
2020-12-22 12:15:26 +00:00
|
|
|
}).AsSelf().SingleInstance();
|
|
|
|
builder.RegisterType<Cluster>().AsSelf().SingleInstance();
|
|
|
|
builder.Register(c => new Myriad.Rest.DiscordApiClient(c.Resolve<BotConfig>().Token, c.Resolve<ILogger>()))
|
|
|
|
.AsSelf().SingleInstance();
|
|
|
|
builder.RegisterType<MemoryDiscordCache>().AsSelf().As<IDiscordCache>().SingleInstance();
|
|
|
|
|
2020-01-26 00:27:45 +00:00
|
|
|
// Commands
|
|
|
|
builder.RegisterType<CommandTree>().AsSelf();
|
2020-02-01 12:03:02 +00:00
|
|
|
builder.RegisterType<Autoproxy>().AsSelf();
|
|
|
|
builder.RegisterType<Fun>().AsSelf();
|
2020-06-29 21:51:12 +00:00
|
|
|
builder.RegisterType<Groups>().AsSelf();
|
2020-02-01 12:03:02 +00:00
|
|
|
builder.RegisterType<Help>().AsSelf();
|
|
|
|
builder.RegisterType<ImportExport>().AsSelf();
|
|
|
|
builder.RegisterType<Member>().AsSelf();
|
|
|
|
builder.RegisterType<MemberAvatar>().AsSelf();
|
|
|
|
builder.RegisterType<MemberEdit>().AsSelf();
|
2020-11-23 00:57:01 +00:00
|
|
|
builder.RegisterType<MemberGroup>().AsSelf();
|
2020-02-01 12:03:02 +00:00
|
|
|
builder.RegisterType<MemberProxy>().AsSelf();
|
2021-05-03 10:33:30 +00:00
|
|
|
builder.RegisterType<MessageEdit>().AsSelf();
|
2020-02-01 12:03:02 +00:00
|
|
|
builder.RegisterType<Misc>().AsSelf();
|
2020-11-22 16:58:23 +00:00
|
|
|
builder.RegisterType<Random>().AsSelf();
|
2020-02-01 12:03:02 +00:00
|
|
|
builder.RegisterType<ServerConfig>().AsSelf();
|
|
|
|
builder.RegisterType<Switch>().AsSelf();
|
2020-02-12 14:16:19 +00:00
|
|
|
builder.RegisterType<System>().AsSelf();
|
2020-02-01 12:03:02 +00:00
|
|
|
builder.RegisterType<SystemEdit>().AsSelf();
|
|
|
|
builder.RegisterType<SystemFront>().AsSelf();
|
|
|
|
builder.RegisterType<SystemLink>().AsSelf();
|
|
|
|
builder.RegisterType<SystemList>().AsSelf();
|
|
|
|
builder.RegisterType<Token>().AsSelf();
|
2020-01-26 00:27:45 +00:00
|
|
|
|
|
|
|
// Bot core
|
|
|
|
builder.RegisterType<Bot>().AsSelf().SingleInstance();
|
2020-12-22 12:15:26 +00:00
|
|
|
builder.RegisterType<MessageCreated>().As<IEventHandler<MessageCreateEvent>>();
|
|
|
|
builder.RegisterType<MessageDeleted>().As<IEventHandler<MessageDeleteEvent>>().As<IEventHandler<MessageDeleteBulkEvent>>();
|
|
|
|
builder.RegisterType<MessageEdited>().As<IEventHandler<MessageUpdateEvent>>();
|
|
|
|
builder.RegisterType<ReactionAdded>().As<IEventHandler<MessageReactionAddEvent>>();
|
2020-01-26 00:27:45 +00:00
|
|
|
|
2020-05-05 14:03:46 +00:00
|
|
|
// Event handler queue
|
2020-12-24 13:52:44 +00:00
|
|
|
builder.RegisterType<HandlerQueue<MessageCreateEvent>>().AsSelf().SingleInstance();
|
|
|
|
builder.RegisterType<HandlerQueue<MessageReactionAddEvent>>().AsSelf().SingleInstance();
|
2020-05-05 14:03:46 +00:00
|
|
|
|
2020-01-26 00:27:45 +00:00
|
|
|
// Bot services
|
|
|
|
builder.RegisterType<EmbedService>().AsSelf().SingleInstance();
|
|
|
|
builder.RegisterType<ProxyService>().AsSelf().SingleInstance();
|
|
|
|
builder.RegisterType<LogChannelService>().AsSelf().SingleInstance();
|
|
|
|
builder.RegisterType<DataFileService>().AsSelf().SingleInstance();
|
|
|
|
builder.RegisterType<WebhookExecutorService>().AsSelf().SingleInstance();
|
|
|
|
builder.RegisterType<WebhookCacheService>().AsSelf().SingleInstance();
|
|
|
|
builder.RegisterType<ShardInfoService>().AsSelf().SingleInstance();
|
|
|
|
builder.RegisterType<CpuStatService>().AsSelf().SingleInstance();
|
|
|
|
builder.RegisterType<PeriodicStatCollector>().AsSelf().SingleInstance();
|
2020-02-12 13:21:48 +00:00
|
|
|
builder.RegisterType<LastMessageCacheService>().AsSelf().SingleInstance();
|
2020-02-14 23:12:03 +00:00
|
|
|
builder.RegisterType<LoggerCleanService>().AsSelf().SingleInstance();
|
2020-09-20 20:35:05 +00:00
|
|
|
builder.RegisterType<ErrorMessageService>().AsSelf().SingleInstance();
|
2020-10-23 10:18:28 +00:00
|
|
|
builder.RegisterType<CommandMessageService>().AsSelf().SingleInstance();
|
2020-01-26 00:27:45 +00:00
|
|
|
|
|
|
|
// Sentry stuff
|
|
|
|
builder.Register(_ => new Scope(null)).AsSelf().InstancePerLifetimeScope();
|
2021-01-31 14:03:11 +00:00
|
|
|
builder.RegisterType<SentryEnricher>()
|
|
|
|
.As<ISentryEnricher<MessageCreateEvent>>()
|
|
|
|
.As<ISentryEnricher<MessageDeleteEvent>>()
|
|
|
|
.As<ISentryEnricher<MessageUpdateEvent>>()
|
|
|
|
.As<ISentryEnricher<MessageDeleteBulkEvent>>()
|
|
|
|
.As<ISentryEnricher<MessageReactionAddEvent>>()
|
|
|
|
.SingleInstance();
|
2020-06-11 21:20:46 +00:00
|
|
|
|
|
|
|
// Proxy stuff
|
2020-06-12 18:29:50 +00:00
|
|
|
builder.RegisterType<ProxyMatcher>().AsSelf().SingleInstance();
|
2020-06-11 21:20:46 +00:00
|
|
|
builder.RegisterType<ProxyTagParser>().AsSelf().SingleInstance();
|
2020-04-28 22:05:26 +00:00
|
|
|
|
2020-01-26 00:27:45 +00:00
|
|
|
// Utils
|
|
|
|
builder.Register(c => new HttpClient
|
|
|
|
{
|
|
|
|
Timeout = TimeSpan.FromSeconds(5)
|
|
|
|
}).AsSelf().SingleInstance();
|
2020-06-06 23:30:19 +00:00
|
|
|
builder.RegisterInstance(SystemClock.Instance).As<IClock>();
|
2020-08-26 22:07:00 +00:00
|
|
|
|
|
|
|
builder.RegisterType<DiscordRequestObserver>().AsSelf().SingleInstance();
|
2020-01-26 00:27:45 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|