Added 'say' command type
This commit is contained in:
parent
3f376605f2
commit
0cbe074151
3 changed files with 78 additions and 2 deletions
|
@ -42,7 +42,8 @@ namespace Noikoio.RegexBot.Feature.ModTools
|
||||||
{
|
{
|
||||||
// Define all command types and their corresponding Types here
|
// Define all command types and their corresponding Types here
|
||||||
{ "ban", typeof(Commands.Ban) },
|
{ "ban", typeof(Commands.Ban) },
|
||||||
{ "kick", typeof(Commands.Kick) }
|
{ "kick", typeof(Commands.Kick) },
|
||||||
|
{ "say", typeof(Commands.Say) }
|
||||||
});
|
});
|
||||||
|
|
||||||
public static CommandBase CreateInstance(ModTools root, JProperty def)
|
public static CommandBase CreateInstance(ModTools root, JProperty def)
|
||||||
|
|
75
Feature/ModTools/Commands/Say.cs
Normal file
75
Feature/ModTools/Commands/Say.cs
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
using Discord;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Noikoio.RegexBot.Feature.ModTools.Commands
|
||||||
|
{
|
||||||
|
class Say : CommandBase
|
||||||
|
{
|
||||||
|
public Say(ModTools l, string label, JObject conf) : base(l, label, conf) { }
|
||||||
|
|
||||||
|
// TODO: Whitelist/blacklist - to limit which channels it can "say" into
|
||||||
|
|
||||||
|
public override async Task Invoke(SocketGuild g, SocketMessage msg)
|
||||||
|
{
|
||||||
|
string[] line = msg.Content.Split(new char[] { ' ' }, 3, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
if (line.Length <= 1)
|
||||||
|
{
|
||||||
|
await SendUsageMessage(msg, ":x: You must specify a channel.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (line.Length <= 2 || string.IsNullOrWhiteSpace(line[2]))
|
||||||
|
{
|
||||||
|
await SendUsageMessage(msg, ":x: You must specify a message.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var ch = GetTextChannelFromString(g, line[1]);
|
||||||
|
if (ch == null) await SendUsageMessage(msg, ":x: Unable to find given channel.");
|
||||||
|
await ch.SendMessageAsync(line[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task SendUsageMessage(SocketMessage m, string message)
|
||||||
|
{
|
||||||
|
string desc = $"{this.Command} [channel] [message]\n";
|
||||||
|
desc += "Displays the given message exactly as specified to the given channel.";
|
||||||
|
|
||||||
|
var usageEmbed = new EmbedBuilder()
|
||||||
|
{
|
||||||
|
Title = "Usage",
|
||||||
|
Description = desc
|
||||||
|
};
|
||||||
|
await m.Channel.SendMessageAsync(message ?? "", embed: usageEmbed);
|
||||||
|
}
|
||||||
|
|
||||||
|
private SocketTextChannel GetTextChannelFromString(SocketGuild g, string input)
|
||||||
|
{
|
||||||
|
// Method 1: Check for channel mention
|
||||||
|
// Note: SocketGuild.GetTextChannel(ulong) returns null if no match.
|
||||||
|
var m = ChannelMention.Match(input);
|
||||||
|
if (m.Success)
|
||||||
|
{
|
||||||
|
ulong channelId = ulong.Parse(m.Groups["snowflake"].Value);
|
||||||
|
return g.GetTextChannel(channelId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method 2: Check if specified in string, scan manually
|
||||||
|
if (input.StartsWith('#'))
|
||||||
|
{
|
||||||
|
input = input.Substring(1);
|
||||||
|
if (input.Length <= 0) return null;
|
||||||
|
foreach (var c in g.Channels)
|
||||||
|
{
|
||||||
|
if (string.Equals(c.Name, input, StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
{
|
||||||
|
return c as SocketTextChannel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,7 +4,7 @@
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>netcoreapp2.0</TargetFramework>
|
<TargetFramework>netcoreapp2.0</TargetFramework>
|
||||||
<RootNamespace>Noikoio.RegexBot</RootNamespace>
|
<RootNamespace>Noikoio.RegexBot</RootNamespace>
|
||||||
<AssemblyVersion>2.1.0.0</AssemblyVersion>
|
<AssemblyVersion>2.1.1.0</AssemblyVersion>
|
||||||
<Description>Highly configurable Discord moderation bot</Description>
|
<Description>Highly configurable Discord moderation bot</Description>
|
||||||
<Authors>Noikoio</Authors>
|
<Authors>Noikoio</Authors>
|
||||||
<Company />
|
<Company />
|
||||||
|
|
Loading…
Reference in a new issue