예제 #1
0
        public async Task SetPinnedMessage(ulong messageId)
        {
            await _pinnedMessageRepository.Add(new PinnedMessage
            {
                MessageId = messageId
            });

            await ReplyAsync($"Successfully set pinned message to [{messageId}]!");
        }
예제 #2
0
        public async Task AddChannel(SocketGuildChannel channel)
        {
            await _discordSettingsRepository.Add(new DiscordSettings
            {
                DiscordChannelId = channel.Id
            });

            await ReplyAsync($"Successfully added announcement channel to [{channel.Name}]!");
        }
예제 #3
0
        public async Task Add(string twitchUsername, uint hexColor, [Remainder] string tagLine)
        {
            var streamers = _streamerRepository.GetCollection().AsQueryable();

            if (streamers.FirstOrDefault(s => s.Username == twitchUsername) != null)
            {
                await ReplyAsync("A streamer with that username already exists!");

                return;
            }

            await _streamerRepository.Add(new Streamer
            {
                Username = twitchUsername,
                TagLine  = tagLine,
                HexColor = hexColor
            });

            await ReplyAsync($"Successfully added {twitchUsername} to the Live Check List!");
        }
예제 #4
0
        public async Task UpdatePinnedMessage(List <Streamer> liveStreamers,
                                              List <Streamer> offlineStreamers)
        {
            var channel = GetChannel(_discordSettingsRepository.GetAll().FirstOrDefault()?.DiscordChannelId);

            if (channel == null)
            {
                return;
            }

            var pinnedMessageId = _pinnedMessageRepository.GetAll().FirstOrDefault()?.MessageId;

            if (pinnedMessageId == null)
            {
                var newPinnedMessage = await channel.SendMessageAsync(string.Empty,
                                                                      embed : EmbedHelper.PinnedMessageEmbedBuilder(liveStreamers, offlineStreamers));

                var newPinnedMessageId = await _pinnedMessageRepository.Add(new PinnedMessage
                {
                    MessageId = newPinnedMessage.Id
                });

                pinnedMessageId = newPinnedMessageId.MessageId;

                _logger.LogDebug("Created new pinned message");
            }


            if (!(await channel.GetMessageAsync(pinnedMessageId.Value) is RestUserMessage pinnedMessage))
            {
                _logger.LogError("Could not find pinned message!");

                return;
            }

            await pinnedMessage.ModifyAsync(msg =>
            {
                msg.Content = string.Empty;
                msg.Embed   = EmbedHelper.PinnedMessageEmbedBuilder(liveStreamers, offlineStreamers);
            });
        }
예제 #5
0
        public async Task <List <Streamer> > Announce(IEnumerable <Streamer> streamers)
        {
            var liveStreamers = new List <Streamer>();

            foreach (var streamer in streamers)
            {
                try
                {
                    var channel = GetChannel(_discordSettingsRepository.GetAll().FirstOrDefault()?.DiscordChannelId);

                    var user = await _twitchApiHelper.GetUser(streamer.Username);

                    if (user == null)
                    {
                        continue;
                    }

                    var stream = await _twitchApiHelper.GetStream(user);

                    var announcementMessage = _announcementMessageRepository.GetAll()
                                              .FirstOrDefault(am => am.Streamer.Id == streamer.Id);

                    if (announcementMessage != null)
                    {
                        if (stream == null || CheckStreamTitle(stream) || stream.GameId != TwitchConstants.GtaGameId)
                        {
                            await RemoveLiveMessage(channel, announcementMessage);
                        }

                        continue;
                    }

                    if (stream == null)
                    {
                        continue;
                    }

                    if (CheckStreamTitle(stream))
                    {
                        continue;
                    }

                    var message = await channel.SendMessageAsync(string.Empty,
                                                                 embed : EmbedHelper.LiveMessageEmbedBuilder(streamer, user, stream));

                    await _announcementMessageRepository.Add(new AnnouncementMessages
                    {
                        MessageId = message.Id,
                        Streamer  = streamer
                    });

                    _logger.LogInformation($"Successfully announced streamer [{streamer.Username}]");
                }
                catch (Exception exception)
                {
                    _logger.LogError(exception,
                                     $"Error occured while announcing streamer [{streamer.Username}]: {exception}");
                }
            }

            return(liveStreamers);
        }