public bool AddRaid(Raid raid, ulong senderId, ulong channelSenderId) { var roles = viewDiscordChannel.GetUserRoles(senderId, viewDiscordChannel.GetGuildIdByChannel(channelSenderId)); if (!roles.Contains(captainRoleName)) { return(false); } var captain = database.Users.GetAll().FirstOrDefault(p => p.IdDiscord == senderId); if (captain == default) { return(false); } raid.CaptainName = captain.Name.Trim(); if (!captain.IsCaptain) { captain.IsCaptain = true; database.Users.Update(captain); database.Captains.Add(new Captains() { DroveRaids = 0, LastDrivenRaid = null, User = captain }); database.Save(); } raid.Id = GenerateId(); raid.CaptainUserId = captain.Id; string mes = BuildString(raid); raid.ChannelAssemblyId = viewDiscordChannel.CreateChannel( raid.ChannelAssemblyId, (raid.TimeStart.ToShortTimeString() + " " + raid.CaptainName)); raid.MessageId = viewDiscordChannel.SendMessage(mes, raid.ChannelAssemblyId); raid.TableMessageId = default; raid.timerAssembly = new TimerCallback(raid.TimeStartAssembly, raid.SetIsAssemblingTrue); raid.timerStart = new TimerCallback(raid.TimeStart, raid.Start); raid.timerHourAfterStart = new TimerCallback(raid.TimeStart + new TimeSpan(1, 0, 0), raid.HourAfterStart); currentRaids.Add(raid); if (viewDiscordChannel.DoesMessageExist(raid.MessageId, raid.ChannelAssemblyId)) { viewDiscordChannel.AddReactionToMes(raid.MessageId, raid.ChannelAssemblyId, Reactions.HEART); } Raids raids = mapperRaidToRaids.Map <Raid, Raids>(raid); files.Add <Raids>(raids, FileTypes.CurrentRaids); return(true); }
private void MessageSended(Views.Entites.Message e) { Message mes = new Message() { Content = e.Content, Channel = new Channel() { Id = e.ChannelId, Name = e.ChannelName }, SenderID = e.SenderID }; if (mes.Content.StartsWith(Prefix)) { if (mes.Content == (Prefix + resourceDMC.GetString("RegHere"))) { bool hasPermissions = false; var roles = viewDiscordChannel.GetUserRoles(mes.SenderID, viewDiscordChannel.GetGuildIdByChannel(mes.Channel.Id)); foreach (var item in AdminRolesName) { if (roles.Contains(item)) { hasPermissions = true; break; } } if (hasPermissions) { viewDiscordChannel.AddReactionToMes(e, AddChannelToReg(mes.Channel) ? MainBot.Models.Reactions.OK : MainBot.Models.Reactions.NO); return; } viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); } if (Regex.IsMatch(mes.Content, $"^{Prefix}{resourceDMC.GetString("Reg")}" + " .+")) { if (!Regex.IsMatch(mes.Content, $@"^{Prefix}{resourceDMC.GetString("Reg")}" + @" \w+$")) { viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); return; } if (!files.GetAll <DataAccess.Entities.Channels>(FileTypes.ChannelsToReg).Result.Contains (new DataAccess.Entities.Channels(e.ChannelId, e.ChannelName))) { viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); return; } string Name = Regex.Match(mes.Content, NamePattern).Value; if (Name == "") { viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); return; } var flag = AddUserToDB(new User() { IdDiscord = mes.SenderID, IsCaptain = false, LastRaidDate = null, Name = Name, RaidsVisited = 0 }); viewDiscordChannel.AddReactionToMes(e, flag ? MainBot.Models.Reactions.OK : MainBot.Models.Reactions.NO); } if (Regex.IsMatch(mes.Content, $"^{Prefix}({resourceDMC.GetString("CreateRaid1")}|" + $"{resourceDMC.GetString("CreateRaid3")}|" + $"{resourceDMC.GetString("CreateRaid2")})" + " .+")) { string Channel = ""; DateTime TimeStart = DateTime.Now; DateTime TimeStartAssembly = DateTime.Now.AddMinutes(1); TimeStartAssembly = TimeStartAssembly.AddSeconds(TimeStartAssembly.Second * -1); int ReservedUsers = 1; if (TimeStartAssembly.ToShortTimeString() == "00:00") { TimeStartAssembly.AddDays(1); } if (Regex.IsMatch(mes.Content, $@"^{Prefix}({resourceDMC.GetString("CreateRaid1")}|{resourceDMC.GetString("CreateRaid2")}|{resourceDMC.GetString("CreateRaid3")})" + $@" {resourcePatterns.GetString("Channel-TimeStart")}$")) { // channel timeStart var Args = mes.Content.Split(' '); Channel = Args[1]; var HoursAndMins = Args[2].Split(':'); TimeSpan timeSpan = new TimeSpan(Int32.Parse(HoursAndMins[0]), Int32.Parse(HoursAndMins[1]), 0); TimeStart = TimeStart.Date + timeSpan; if (TimeStart < DateTime.Now) { TimeStart = TimeStart.AddDays(1); } } else { if (Regex.IsMatch(mes.Content, $@"^{Prefix}({resourceDMC.GetString("CreateRaid1")}|{resourceDMC.GetString("CreateRaid2")}|{resourceDMC.GetString("CreateRaid3")})" + $@" {resourcePatterns.GetString("Channel-TimeStart-TimeStartAssembly")}$")) { // channel timeStart TimeStartAssembly var Args = mes.Content.Split(' '); Channel = Args[1]; var HoursAndMins = Args[2].Split(':'); TimeSpan timeSpan = new TimeSpan(Int32.Parse(HoursAndMins[0]), Int32.Parse(HoursAndMins[1]), 0); TimeStart = TimeStart.Date + timeSpan; HoursAndMins = Args[3].Split(':'); timeSpan = new TimeSpan(Int32.Parse(HoursAndMins[0]), Int32.Parse(HoursAndMins[1]), 0); TimeStartAssembly = TimeStartAssembly.Date + timeSpan; if (TimeStart < DateTime.Now) { TimeStart = TimeStart.AddDays(1); } if (TimeStartAssembly < DateTime.Now) { TimeStartAssembly = TimeStartAssembly.AddDays(1); } } else { if (Regex.IsMatch(mes.Content, $@"^{Prefix}({resourceDMC.GetString("CreateRaid1")}|{resourceDMC.GetString("CreateRaid2")}|{resourceDMC.GetString("CreateRaid3")})" + $@" {resourcePatterns.GetString("Channel-TimeStart-ReservedUsers")}$")) { // channel timeStart reservedUsers var Args = mes.Content.Split(' '); Channel = Args[1]; var HoursAndMins = Args[2].Split(':'); TimeSpan timeSpan = new TimeSpan(Int32.Parse(HoursAndMins[0]), Int32.Parse(HoursAndMins[1]), 0); TimeStart = TimeStart.Date + timeSpan; if (TimeStart < DateTime.Now) { TimeStart = TimeStart.AddDays(1); } ReservedUsers = Int32.Parse(Args[3]); } else { if (Regex.IsMatch(mes.Content, $@"^{Prefix}({resourceDMC.GetString("CreateRaid1")}|{resourceDMC.GetString("CreateRaid2")}|{resourceDMC.GetString("CreateRaid3")})" + $@" {resourcePatterns.GetString("Channel-TimeStart-TimeStartAssembly-ReserverUsers")}$")) { // channel timeStart timeStartAssembly reserverUsers var Args = mes.Content.Split(' '); Channel = Args[1]; var HoursAndMins = Args[2].Split(':'); TimeSpan timeSpan = new TimeSpan(Int32.Parse(HoursAndMins[0]), Int32.Parse(HoursAndMins[1]), 0); TimeStart = TimeStart.Date + timeSpan; if (TimeStart < DateTime.Now) { TimeStart = TimeStart.AddDays(1); } HoursAndMins = Args[3].Split(':'); timeSpan = new TimeSpan(Int32.Parse(HoursAndMins[0]), Int32.Parse(HoursAndMins[1]), 0); TimeStartAssembly = TimeStartAssembly.Date + timeSpan; if (TimeStartAssembly < DateTime.Now) { TimeStartAssembly = TimeStartAssembly.AddDays(1); } ReservedUsers = Int32.Parse(Args[4]); } else { viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); return; } } } } if (TimeStart <= TimeStartAssembly) { viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); return; } bool IsRaidAdded = raidsService.AddRaid( new Raid() { TimeStart = TimeStart, TimeStartAssembly = TimeStartAssembly, Channel = Channel, ChannelAssemblyId = mes.Channel.Id, ReservedUsers = ReservedUsers }, mes.SenderID, mes.Channel.Id); viewDiscordChannel.AddReactionToMes(e, IsRaidAdded ? MainBot.Models.Reactions.OK : MainBot.Models.Reactions.NO); } if (Regex.IsMatch(mes.Content, $"^{Prefix}{resourceDMC.GetString("Re-register")} .+")) { if (!Regex.IsMatch(mes.Content, $@"^{Prefix}перерег \w+$")) { viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); return; } if (!files.GetAll <DataAccess.Entities.Channels>(FileTypes.ChannelsToReg).Result.Contains (new DataAccess.Entities.Channels(e.ChannelId, e.ChannelName))) { viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); return; } string Name = Regex.Match(mes.Content, NamePattern).Value; if (Name == "") { viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); return; } var user = dataBase.Users.GetAll().FirstOrDefault(p => p.IdDiscord == e.SenderID); if (user == default) { viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); return; } user.Name = Name; UpdateUser(user); viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.OK); } if (Regex.IsMatch(mes.Content, $"^{Prefix}{resourceDMC.GetString("DeleteRaid1")}")) { var roles = viewDiscordChannel.GetUserRoles(mes.SenderID, viewDiscordChannel.GetGuildIdByChannel(mes.Channel.Id)); if (!roles.Contains(CaptainRoleName)) { viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); return; } var raidId = raidsService.GetRaidId(mes.Channel.Id); if (raidId == default) { viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.NO); return; } raidsService.DeleteRaid(raidId); } if (Regex.IsMatch(mes.Content, $"{Prefix}{resourceDMC.GetString("Help")}")) { viewDiscordChannel.SendMessage(resourceDMO.GetString("Help"), mes.Channel.Id); viewDiscordChannel.AddReactionToMes(e, MainBot.Models.Reactions.OK); } } }