private Task Discord_MessageCreated(DSharpPlus.EventArgs.MessageCreateEventArgs e) { if (!e.Author.IsBot) { //execute commands if (e.Channel.Id.Equals(ulong.Parse(Plugin.Config.CommandChannelId)) && e.Message.Content.StartsWith(Plugin.Config.CommandPrefix)) { string cmd = e.Message.Content.Substring(Plugin.Config.CommandPrefix.Length); var cmdText = new string(cmd.Skip(1).ToArray()); if (Plugin.Torch.CurrentSession?.State == TorchSessionState.Loaded) { var manager = Plugin.Torch.CurrentSession.Managers.GetManager <CommandManager>(); var command = manager.Commands.GetCommand(cmdText, out string argText); if (command == null) { SendCmdResponse("Command not found: " + cmdText, e.Channel); } else { var cmdPath = string.Join(".", command.Path); var splitArgs = Regex.Matches(argText, "(\"[^\"]+\"|\\S+)").Cast <Match>().Select(x => x.ToString().Replace("\"", "")).ToList(); SEDiscordBridgePlugin.Log.Trace($"Invoking {cmdPath} for server."); var context = new SEDBCommandHandler(Plugin.Torch, command.Plugin, Sync.MyId, argText, splitArgs); context.ResponeChannel = e.Channel; context.OnResponse += OnCommandResponse; var invokeSuccess = false; Plugin.Torch.InvokeBlocking(() => invokeSuccess = command.TryInvoke(context)); SEDiscordBridgePlugin.Log.Debug($"invokeSuccess {invokeSuccess}"); if (!invokeSuccess) { SendCmdResponse("Error executing command: " + cmdText, e.Channel); } SEDiscordBridgePlugin.Log.Info($"Server ran command '{string.Join(" ", cmdText)}'"); } } else { SendCmdResponse("Error: Server is not running.", e.Channel); } return(Task.CompletedTask); } //send to global if (e.Channel.Id.Equals(ulong.Parse(Plugin.Config.ChatChannelId))) { string sender = Plugin.Config.ServerName; if (!Plugin.Config.AsServer) { if (Plugin.Config.UseNicks) { sender = e.Guild.GetMemberAsync(e.Author.Id).Result.Nickname; } else { sender = e.Author.Username; } } var manager = Plugin.Torch.CurrentSession.Managers.GetManager <IChatManagerServer>(); var dSender = Plugin.Config.Format2.Replace("{p}", sender); var msg = MentionIDToName(e.Message); lastMessage = dSender + msg; manager.SendMessageAsOther(dSender, msg, typeof(MyFontEnum).GetFields().Select(x => x.Name).Where(x => x.Equals(Plugin.Config.GlobalColor)).First()); } //send to faction IEnumerable <string> channelIds = Plugin.Config.FactionChannels.Where(c => e.Channel.Id.Equals(ulong.Parse(c.Split(':')[1]))); if (channelIds.Count() > 0) { foreach (string chId in channelIds) { IEnumerable <IMyFaction> facs = MySession.Static.Factions.Factions.Values.Where(f => f.Name.Equals(chId.Split(':')[0])); if (facs.Count() > 0) { IMyFaction fac = facs.First(); foreach (MyFactionMember mb in fac.Members.Values) { if (!MySession.Static.Players.GetOnlinePlayers().Any(p => p.Identity.IdentityId.Equals(mb.PlayerId))) { continue; } ulong steamid = MySession.Static.Players.TryGetSteamId(mb.PlayerId); string sender = Plugin.Config.ServerName; if (!Plugin.Config.AsServer) { if (Plugin.Config.UseNicks) { sender = e.Guild.GetMemberAsync(e.Author.Id).Result.Nickname; } else { sender = e.Author.Username; } } var manager = Plugin.Torch.CurrentSession.Managers.GetManager <IChatManagerServer>(); var dSender = Plugin.Config.Format2.Replace("{p}", sender); var msg = MentionIDToName(e.Message); lastMessage = dSender + msg; manager.SendMessageAsOther(dSender, msg, typeof(MyFontEnum).GetFields().Select(x => x.Name).Where(x => x.Equals(Plugin.Config.FacColor)).First(), steamid); } } } } } return(Task.CompletedTask); }
private Task Discord_MessageCreated(DiscordClient discord, DSharpPlus.EventArgs.MessageCreateEventArgs e) { bool cmdConditionMatch = false; dynamic cmdPrefixes = Plugin.Config.CommandPrefix; string matchedPrefix = ""; cmdPrefixes = cmdPrefixes.Split(); if (!e.Author.IsBot || (!botId.Equals(e.Author.Id) && Plugin.Config.BotToGame)) { string comChannelId = Plugin.Config.CommandChannelId; if (!string.IsNullOrEmpty(comChannelId)) { foreach (string prefix in cmdPrefixes) { if (Plugin.Config.CommandChannelId.Contains(e.Channel.Id.ToString()) && e.Message.Content.StartsWith(prefix)) { cmdConditionMatch = true; matchedPrefix = prefix; } } //execute commands if (cmdConditionMatch) { var cmdArgs = e.Message.Content.Substring(matchedPrefix.Length); var cmd = cmdArgs.Split(' ')[0]; // Check for permission if (Plugin.Config.CommandPerms.Count() > 0) { var userId = e.Author.Id.ToString(); bool hasRolePerm = e.Guild.GetMemberAsync(e.Author.Id).Result.Roles.Where(r => Plugin.Config.CommandPerms.Where(c => c.Split(':')[0].Equals(r.Id.ToString())).Any()).Any(); if (Plugin.Config.CommandPerms.Where(c => { if (!hasRolePerm && !c.Split(':')[0].Equals(userId)) { return(true); } else if ((c.Split(':')[0].Equals(userId) || hasRolePerm) && (c.Split(':')[1].Equals(cmd) || c.Split(':')[1].Equals("*"))) { return(false); } return(true); }).Any()) { SendCmdResponse($"No permission for command: {cmd}", e.Channel, DiscordColor.Red, cmd); return(Task.CompletedTask); } } if (Plugin.Torch.CurrentSession?.State == TorchSessionState.Loaded) { var manager = Plugin.Torch.CurrentSession.Managers.GetManager <CommandManager>(); var command = manager.Commands.GetCommand(cmdArgs, out string argText); if (command == null) { SendCmdResponse($"Command not found: {cmdArgs}", e.Channel, DiscordColor.Red, cmd); } else { var cmdPath = string.Join(".", command.Path); var splitArgs = Regex.Matches(argText, "(\"[^\"]+\"|\\S+)").Cast <Match>().Select(x => x.ToString().Replace("\"", "")).ToList(); SEDiscordBridgePlugin.Log.Trace($"Invoking {cmdPath} for server."); var context = new SEDBCommandHandler(Plugin.Torch, command.Plugin, Sync.MyId, argText, splitArgs); context.ResponeChannel = e.Channel; context.OnResponse += OnCommandResponse; var invokeSuccess = false; Plugin.Torch.InvokeBlocking(() => invokeSuccess = command.TryInvoke(context)); SEDiscordBridgePlugin.Log.Debug($"invokeSuccess {invokeSuccess}"); if (!invokeSuccess) { SendCmdResponse($"Error executing command: {cmdArgs}", e.Channel, DiscordColor.Red, cmd); } SEDiscordBridgePlugin.Log.Info($"Server ran command '{cmdArgs}'"); } } else { SendCmdResponse("Error: Server is not running.", e.Channel, DiscordColor.Red, cmd); } return(Task.CompletedTask); } } //send to global if (Plugin.Config.ChatChannelId.Contains(e.Channel.Id.ToString())) { string sender = Plugin.Config.ServerName; if (!Plugin.Config.AsServer) { if (Plugin.Config.UseNicks) { sender = e.Guild.GetMemberAsync(e.Author.Id).Result.Nickname; } else { sender = e.Guild.GetMemberAsync(e.Author.Id).Result.Username; } } var manager = Plugin.Torch.CurrentSession.Managers.GetManager <IChatManagerServer>(); var dSender = Plugin.Config.Format2.Replace("{p}", sender); var msg = MentionIDToName(e.Message); lastMessage = dSender + msg; manager.SendMessageAsOther(dSender, msg, typeof(MyFontEnum).GetFields().Select(x => x.Name).Where(x => x.Equals(Plugin.Config.GlobalColor)).First()); } //send to faction IEnumerable <string> channelIds = Plugin.Config.FactionChannels.Where(c => e.Channel.Id.Equals(ulong.Parse(c.Split(':')[1]))); if (channelIds.Count() > 0) { foreach (string chId in channelIds) { IEnumerable <IMyFaction> facs = MySession.Static.Factions.Factions.Values.Where(f => f.Name.Equals(chId.Split(':')[0])); if (facs.Count() > 0) { IMyFaction fac = facs.First(); foreach (MyFactionMember mb in fac.Members.Values) { if (!MySession.Static.Players.GetOnlinePlayers().Any(p => p.Identity.IdentityId.Equals(mb.PlayerId))) { continue; } ulong steamid = MySession.Static.Players.TryGetSteamId(mb.PlayerId); string sender = Plugin.Config.ServerName; if (!Plugin.Config.AsServer) { if (Plugin.Config.UseNicks) { sender = e.Guild.GetMemberAsync(e.Author.Id).Result.Nickname; } else { sender = e.Author.Username; } } var manager = Plugin.Torch.CurrentSession.Managers.GetManager <IChatManagerServer>(); var dSender = Plugin.Config.FacFormat2.Replace("{p}", sender); var msg = MentionIDToName(e.Message); lastMessage = dSender + msg; manager.SendMessageAsOther(dSender, msg, typeof(MyFontEnum).GetFields().Select(x => x.Name).Where(x => x.Equals(Plugin.Config.FacColor)).First(), steamid); } } } } } return(Task.CompletedTask); }