Add basic role add command
This commit is contained in:
parent
9dae8289dc
commit
38fd89eeef
94
ChaosBot/Discord/Modules/Admin/Role.cs
Normal file
94
ChaosBot/Discord/Modules/Admin/Role.cs
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
using System;
|
||||||
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using ChaosBot.Discord.PreConditions;
|
||||||
|
using ChaosBot.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using NLog;
|
||||||
|
|
||||||
|
namespace ChaosBot.Discord.Modules.Admin
|
||||||
|
{
|
||||||
|
public class Role : ModuleBase
|
||||||
|
{
|
||||||
|
private static readonly ILogger Logger = Program.Logger;
|
||||||
|
|
||||||
|
[Command("role add")]
|
||||||
|
[CheckCommandPerm("Admin")]
|
||||||
|
public async Task RoleAddCommand(params string[] parameters)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await using (ChaosbotContext dbContext = new ChaosbotContext())
|
||||||
|
{
|
||||||
|
string parameterString = String.Join("", parameters);
|
||||||
|
|
||||||
|
// Fetch last message
|
||||||
|
IMessage message = (await Context.Channel.GetMessagesAsync(2).FlattenAsync()).Last();
|
||||||
|
|
||||||
|
// Parse parameters
|
||||||
|
string pattern = @"((<a?:\w+:\d+>|[^<]+)<@&(\d+)>)";
|
||||||
|
string input = parameterString;
|
||||||
|
|
||||||
|
foreach (Match m in Regex.Matches(input, pattern))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
IEmote emote;
|
||||||
|
string emoteString = m.Groups[2].Value;
|
||||||
|
string roleString = m.Groups[3].Value;
|
||||||
|
IRole role = Context.Guild.Roles.First(r => r.Id.ToString() == roleString);
|
||||||
|
|
||||||
|
if (Emote.TryParse(emoteString, out Emote tempEmote))
|
||||||
|
{
|
||||||
|
if (tempEmote.Animated && Context.Client.CurrentUser.PremiumType != PremiumType.Nitro)
|
||||||
|
throw new NotSupportedException("No support for animated icons");
|
||||||
|
|
||||||
|
if (Context.Guild.Emotes.All(e => e.Id != tempEmote.Id) &&
|
||||||
|
Context.Client.CurrentUser.PremiumType != PremiumType.Nitro)
|
||||||
|
throw new NotSupportedException($"No support for emotes from other servers");
|
||||||
|
|
||||||
|
emote = tempEmote;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
emote = new Emoji(emoteString);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Register DB entry
|
||||||
|
RoleReaction roleReaction = new RoleReaction
|
||||||
|
{
|
||||||
|
DiscordGuildId = Context.Guild.Id,
|
||||||
|
DiscordMessageId = message.Id,
|
||||||
|
DiscordRoleId = role.Id,
|
||||||
|
DiscordEmoteName = emote.ToString()
|
||||||
|
};
|
||||||
|
|
||||||
|
await dbContext.RoleReactions.Upsert(roleReaction)
|
||||||
|
.On(r => new {r.DiscordGuildId, r.DiscordEmoteNameEncoded, r.DiscordMessageId, r.DiscordRoleId})
|
||||||
|
.RunAsync();
|
||||||
|
|
||||||
|
// Add reaction to message
|
||||||
|
await message.AddReactionAsync(emote);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await ReplyAsync($"Something went wrong trying to process {m.Value}: {ex.Message}");
|
||||||
|
Logger.Error(
|
||||||
|
$"{MethodBase.GetCurrentMethod().ReflectedType.FullName}: Exception [{ex}] thrown, <[{ex.Message}]>.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await dbContext.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Error($"{MethodBase.GetCurrentMethod().ReflectedType.FullName}: Exception [{ex}] thrown, <[{ex.Message}]>.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user