Exemplo n.º 1
0
        public void ParseMessage(EventMessage eventMessage)
        {
            Raid raid = null;

            if (eventMessage != null && eventMessage.Event == EventMessage.EventType.Raid)
            {
                raid = ParseRaid(eventMessage.Data);
            }
            else if (eventMessage != null && eventMessage.Event == EventMessage.EventType.Attendance)
            {
                raid = ParseAttendance(eventMessage.Data);
            }
            Send(raid);
        }
Exemplo n.º 2
0
        protected async override Task Send(Raid raid)
        {
            if (raid == null || !Raids.Contains(raid))
            {
                return;
            }

            var link = $"{raid.Name}"; // (https://raidikalu.herokuapp.com/#raidi-{raid.Id})";

            var message = raid.ComposeMessage(link);
            var url     = $"https://raidikalu.herokuapp.com/#raidi-{raid.Id}";

            var embed = new EmbedBuilder
            {
                Title = "Raidikalu",
                Url   = url
            };

            bool useDelay = false;

            if (raid.Messages.Any())
            {
                try
                {
                    useDelay = raid.Messages.Count > 25;
                    foreach (var raidMessage in raid.Messages)
                    {
                        var discordMessage = raidMessage.Content as Discord.Rest.RestUserMessage;
                        if (discordMessage != null)
                        {
                            await discordMessage.ModifyAsync(m => { m.Content = message; m.Embed = embed.Build(); });
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Error modifying message: {e.Message}");
                }
            }
            else
            {
                try
                {
                    var sendChannels = Channels.Where(ch => ch.Gyms.Contains(raid.Name)).ToList();
                    useDelay = sendChannels.Count() > 25;
                    foreach (var serviceChannel in sendChannels)
                    {
                        var channel = client.GetChannel((ulong)serviceChannel.Id);
                        if (channel == null)
                        {
                            var splitName = serviceChannel.Name.Split('#');
                            if (splitName.Length != 2)
                            {
                                continue;
                            }
                            var user = client.GetUser(splitName[0].Substring(1), splitName[1]);
                            if (user != null)
                            {
                                var dmchannel = user.GetOrCreateDMChannelAsync().Result;
                                raid.Messages.Add(new DiscordMessage(await dmchannel.SendMessageAsync(message, false, embed.Build())));
                            }
                        }
                        else if (channel is SocketTextChannel textChannel)
                        {
                            raid.Messages.Add(new DiscordMessage(await textChannel.SendMessageAsync(message, false, embed.Build())));
                        }
                        if (useDelay)
                        {
                            Task.Delay(200).Wait();
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Error writing message: {e.Message}");
                }
            }

            //throw new NotImplementedException();
        }
Exemplo n.º 3
0
 protected abstract Task Send(Raid raid);
Exemplo n.º 4
0
        private Raid ParseRaid(EventData data)
        {
            if (data == null || !Channels.Any(ch => ch.Gyms.Any(gym => gym.Contains(data.Gym))))
            {
                return(null);
            }

            if (!data.Start.HasValue && !data.End.HasValue)
            {
                Console.WriteLine("No Start or End time.");
                return(null);
            }

            DateTime start = DateTimeOffset.FromUnixTimeSeconds(data.Start.GetValueOrDefault()).LocalDateTime;
            DateTime end   = DateTimeOffset.FromUnixTimeSeconds(data.End.GetValueOrDefault()).LocalDateTime;

            if (data.Start.HasValue && !data.End.HasValue)
            {
                end = start + new TimeSpan(0, 45, 0);
            }
            else if (!data.Start.HasValue)
            {
                start = end - new TimeSpan(0, 45, 0);
            }

            if (end < DateTime.Now)
            {
                return(null);
            }

            var raid = Raids.FirstOrDefault(r => r.Id == data.Raid);

            if (raid != null)
            {
                raid.Pokemon   = data.Pokemon;
                raid.Tier      = data.Tier.GetValueOrDefault();
                raid.StartTime = start;
                raid.EndTime   = end;
            }
            else
            {
                raid = new Raid(data.Raid, data.Gym)
                {
                    Pokemon   = data.Pokemon,
                    Tier      = data.Tier.GetValueOrDefault(),
                    StartTime = start,
                    EndTime   = end
                };
                Raids.Add(raid);
            }

            var raidToRemove       = Raids.FirstOrDefault(r => r.EndTime < DateTime.Now);
            var currentRaidRemoved = false;

            while (raidToRemove != null)
            {
                Raids.Remove(raidToRemove);
                if (raidToRemove == raid)
                {
                    currentRaidRemoved = true;
                }
                raidToRemove = Raids.FirstOrDefault(r => r.EndTime < DateTime.Now);
            }

            if (currentRaidRemoved)
            {
                return(null);
            }

            return(raid);
        }