holy shit I am the goat
This commit is contained in:
42
Services/BotService.cs
Normal file
42
Services/BotService.cs
Normal file
@@ -0,0 +1,42 @@
|
||||
using Valour.Sdk.Client;
|
||||
using Valour.Sdk.Models;
|
||||
|
||||
namespace Reactor.Services
|
||||
{
|
||||
public static class BotService
|
||||
{
|
||||
public static async Task InitializeBotAsync(
|
||||
string token,
|
||||
ValourClient client,
|
||||
Dictionary<long, Channel> channelCache,
|
||||
HashSet<long> initializedPlanets,
|
||||
string prefix)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(token))
|
||||
{
|
||||
Console.WriteLine("TOKEN not set.");
|
||||
return;
|
||||
}
|
||||
|
||||
var loginResult = await client.InitializeUser(token);
|
||||
if (!loginResult.Success)
|
||||
{
|
||||
Console.WriteLine($"Login failed: {loginResult.Message}");
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine($"Logged in as {client.Me.Name} (ID: {client.Me.Id})");
|
||||
|
||||
await PlanetService.InitializePlanetsAsync(client, channelCache, initializedPlanets);
|
||||
|
||||
client.PlanetService.JoinedPlanetsUpdated += async () =>
|
||||
{
|
||||
await PlanetService.InitializePlanetsAsync(client, channelCache, initializedPlanets);
|
||||
};
|
||||
|
||||
client.MessageService.MessageReceived += async (msg) => await MessageService.HandleMessageAsync(client, channelCache, msg, prefix);
|
||||
|
||||
Console.WriteLine("Bot ready and listening...");
|
||||
}
|
||||
}
|
||||
}
|
||||
46
Services/MessageService.cs
Normal file
46
Services/MessageService.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using Reactor.Commands;
|
||||
using Valour.Sdk.Client;
|
||||
using Valour.Sdk.Models;
|
||||
|
||||
namespace Reactor.Services
|
||||
{
|
||||
public static class MessageService
|
||||
{
|
||||
public static async Task HandleMessageAsync(
|
||||
ValourClient client,
|
||||
Dictionary<long, Channel> channelCache,
|
||||
Message message,
|
||||
string prefix)
|
||||
{
|
||||
if (message.AuthorUserId == client.Me.Id) return;
|
||||
|
||||
string content = message.Content ?? "";
|
||||
if (string.IsNullOrWhiteSpace(content)) return;
|
||||
if (!content.StartsWith(prefix)) return;
|
||||
|
||||
long channelId = message.ChannelId;
|
||||
|
||||
var member = await message.FetchAuthorMemberAsync();
|
||||
string memberPing = member != null ? $"«@m-{member.Id}»" : "";
|
||||
|
||||
string withoutPrefix = content.Substring(prefix.Length);
|
||||
|
||||
var parts = withoutPrefix.Split(' ', StringSplitOptions.RemoveEmptyEntries);
|
||||
if (parts.Length == 0) return;
|
||||
|
||||
string command = parts[0].ToLower();
|
||||
string[] args = parts[1..];
|
||||
|
||||
switch (command)
|
||||
{
|
||||
case "help":
|
||||
await HelpCommand.Execute(channelCache, channelId, prefix, memberPing);
|
||||
break;
|
||||
|
||||
case "source":
|
||||
await SourceCommand.Execute(channelCache, channelId, memberPing);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
39
Services/PlanetService.cs
Normal file
39
Services/PlanetService.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using Valour.Sdk.Client;
|
||||
using Valour.Sdk.Models;
|
||||
using Valour.Shared.Models;
|
||||
|
||||
namespace Reactor.Services
|
||||
{
|
||||
public static class PlanetService
|
||||
{
|
||||
public static async Task InitializePlanetsAsync(
|
||||
ValourClient client,
|
||||
Dictionary<long, Channel> channelCache,
|
||||
HashSet<long> initializedPlanets)
|
||||
{
|
||||
foreach (var planet in client.PlanetService.JoinedPlanets)
|
||||
{
|
||||
if (initializedPlanets.Contains(planet.Id))
|
||||
continue;
|
||||
|
||||
Console.WriteLine($"Initializing Planet: {planet.Name}");
|
||||
|
||||
await planet.EnsureReadyAsync();
|
||||
await planet.FetchInitialDataAsync();
|
||||
|
||||
foreach (var channel in planet.Channels)
|
||||
{
|
||||
channelCache[channel.Id] = channel;
|
||||
|
||||
if (channel.ChannelType == ChannelTypeEnum.PlanetChat)
|
||||
{
|
||||
await channel.OpenWithResult("Reactor");
|
||||
Console.WriteLine($"Realtime opened for: {planet.Name} -> {channel.Name}");
|
||||
}
|
||||
}
|
||||
|
||||
initializedPlanets.Add(planet.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user