Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }