initial
This commit is contained in:
90
Budet-cho-bot/CommandHandler.cs
Normal file
90
Budet-cho-bot/CommandHandler.cs
Normal file
@@ -0,0 +1,90 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Discord.Commands;
|
||||
using Discord.WebSocket;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Discord;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Discord_Bot
|
||||
{
|
||||
public class CommandHandlingService
|
||||
{
|
||||
private readonly CommandService _commands;
|
||||
private readonly DiscordSocketClient _client;
|
||||
private readonly IServiceProvider _services;
|
||||
|
||||
public CommandHandlingService(IServiceProvider services)
|
||||
{
|
||||
|
||||
_commands = services.GetRequiredService<CommandService>();
|
||||
_client = services.GetRequiredService<DiscordSocketClient>();
|
||||
_services = services;
|
||||
|
||||
// Event handlers
|
||||
_client.Ready += ClientReadyAsync;
|
||||
_client.MessageReceived += HandleCommandAsync;
|
||||
_client.JoinedGuild += SendJoinMessageAsync;
|
||||
}
|
||||
|
||||
private async Task HandleCommandAsync(SocketMessage rawMessage)
|
||||
{
|
||||
if (rawMessage.Author.IsBot || !(rawMessage is SocketUserMessage message) || message.Channel is IDMChannel)
|
||||
return;
|
||||
|
||||
var context = new SocketCommandContext(_client, message);
|
||||
|
||||
int argPos = 0;
|
||||
|
||||
JObject config = Functions.GetConfig();
|
||||
string[] prefixes = JsonConvert.DeserializeObject<string[]>(config["prefixes"].ToString());
|
||||
|
||||
// Check if message has any of the prefixes or mentiones the bot.
|
||||
if (prefixes.Any(x => message.HasStringPrefix(x, ref argPos)) || message.HasMentionPrefix(_client.CurrentUser, ref argPos))
|
||||
{
|
||||
// Execute the command.
|
||||
var result = await _commands.ExecuteAsync(context, argPos, _services);
|
||||
|
||||
if (!result.IsSuccess && result.Error.HasValue)
|
||||
await context.Channel.SendMessageAsync($":x: {result.ErrorReason}");
|
||||
}
|
||||
}
|
||||
|
||||
private async Task SendJoinMessageAsync(SocketGuild guild)
|
||||
{
|
||||
JObject config = Functions.GetConfig();
|
||||
string joinMessage = config["join_message"]?.Value<string>();
|
||||
|
||||
if (string.IsNullOrEmpty(joinMessage))
|
||||
return;
|
||||
|
||||
// Send the join message in the first channel where the bot can send messsages.
|
||||
foreach (var channel in guild.TextChannels.OrderBy(x => x.Position))
|
||||
{
|
||||
var botPerms = channel.GetPermissionOverwrite(_client.CurrentUser).GetValueOrDefault();
|
||||
|
||||
if (botPerms.SendMessages == PermValue.Deny)
|
||||
continue;
|
||||
|
||||
try
|
||||
{
|
||||
await channel.SendMessageAsync(joinMessage);
|
||||
return;
|
||||
}
|
||||
catch
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ClientReadyAsync()
|
||||
=> await Functions.SetBotStatusAsync(_client);
|
||||
|
||||
public async Task InitializeAsync()
|
||||
=> await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _services);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user