Пример #1
0
        public async Task RunAsync()
        {
            while (true)
            {
                ulong?notifiedMember = null;
                foreach (var member in membersBirthdays)
                {
                    var info        = member.Value;
                    var currentDate = DateTime.Now;
                    if (IsBirthdayToday(info, currentDate) && currentDate.TimeOfDay.TotalHours > 10)
                    {
                        var user = await DefaultGuild.GetMemberAsync(member.Key);

                        var age = currentDate.Year - info.BirthYear;
                        if (_birthdayChannel != null)
                        {
                            await _birthdayChannel.SendMessageAsync($"У {info.Name} {user.Mention} сегодня день рождения," +
                                                                    $" ему исполнилось {age.ToRusAge()}, поздравляем {GetRandomAdditional()} " +
                                                                    $":birthday:");

                            notifiedMember = member.Key;
                        }
                    }
                }
                if (notifiedMember != null)
                {
                    var newInfo = membersBirthdays[(ulong)notifiedMember];
                    newInfo.LastYearNotified = DateTime.Now.Year;
                    membersBirthdays[(ulong)notifiedMember] = newInfo;
                    await SaveAsync();
                }
                await Task.Delay(TimeSpan.FromMinutes(15d));
            }
        }
Пример #2
0
        private async Task Notify(DiscordClient sender, PresenceUpdateEventArgs e)
        {
            if (_notifyChannel == null)
            {
                return;
            }
            var member = await DefaultGuild.GetMemberAsync(e.User.Id);

            if (member == null || !member.Roles.Any((role) => role.Id == streamerRoleId))
            {
                return;
            }

            var    pres         = e.UserAfter.Presence;
            var    actTypeAfter = pres.Activity.ActivityType;
            string content;

            StreamerInfo info;
            bool         isInList = streamersInfo.TryGetValue(member.Id, out info);

            if (actTypeAfter == ActivityType.Streaming && !_currentlyStreaming.Contains(member.Id)) //If start streaming
            {
                _currentlyStreaming.Add(member.Id);
                content = isInList && !string.IsNullOrEmpty(info.StartPhrase) ? info.StartPhrase : defaultStartPhrase;
                var imageUrl = isInList && !string.IsNullOrEmpty(info.ImageUrl) ? info.ImageUrl : defaultImageUrl;

                var actInfo = pres.Activity.RichPresence;
                content = content.Replace("name", $"**{member.Username}**", StringComparison.OrdinalIgnoreCase);
                content = content.Replace("game", $"**{actInfo.State}**", StringComparison.OrdinalIgnoreCase);

                var embedBuilder = new DiscordEmbedBuilder();
                embedBuilder.SetAuthor(member);
                embedBuilder.SetTitle(actInfo.Details);
                embedBuilder.AddField("Игра", actInfo.State);
                embedBuilder.AddField("Ссылка", pres.Activity.StreamUrl);

                try
                {
                    embedBuilder.WithImageUrl(imageUrl);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Не удалось установить картинку для пользователя " + member.Username + " Причина: " + ex.Message);
                }


                await _notifyChannel.SendMessageAsync(content, embed : embedBuilder.Build());
            }
            else if (actTypeAfter != ActivityType.Streaming && _currentlyStreaming.Contains(member.Id)) // If end streaming
            {
                _currentlyStreaming.Remove(member.Id);
                content = isInList && !string.IsNullOrEmpty(info.EndPhrase) ? info.EndPhrase : defaultEndPhrase;

                content = content.Replace("name", $"**{member.Username}**");
                await _notifyChannel.SendMessageAsync(content);
            }
        }
Пример #3
0
 private bool TryGetReactionRole(DiscordMessage msg, string emjName, out DiscordRole role)
 {
     role = null;
     if (msg.Id != rolesMessage?.Id)
     {
         return(false);
     }
     role = DefaultGuild.GetRole(rolesInfo.Where((x) => x.EmojiName == emjName).First().RoleID);
     return(role != null);
 }
Пример #4
0
        private async Task <DiscordAuditLogEntry> GetNewEntryAsync()
        {
            try
            {
                var audit = await DefaultGuild.GetAuditLogsAsync(1);

                _newEntry = audit.First();
                return(_newEntry);
            }
            catch
            {
                _newEntry = null;
                return(_newEntry);
            }
        }
Пример #5
0
        private string GetRolesString(DiscordClient c)
        {
            if (rolesInfo.Count == 0)
            {
                return("Empty");
            }

            StringBuilder builder = new StringBuilder("");

            foreach (var i in rolesInfo)
            {
                var role = DefaultGuild.GetRole(i.RoleID);
                builder.Append($"{role.Mention} - {i.EmojiName.ToEmoji(c)} - {i.Description}\n");
            }
            return(builder.ToString());
        }
Пример #6
0
        private async Task RevokeRoleAsync(DiscordClient sender, MessageReactionRemoveEventArgs e)
        {
            var member = await DefaultGuild.GetMemberAsync(e.User.Id);

            if (member == null)
            {
                return;
            }
            DiscordRole role;

            if (!TryGetReactionRole(e.Message, e.Emoji.Name, out role))
            {
                return;
            }
            await member.RevokeRoleAsync(role);
        }
Пример #7
0
        protected override async Task InitializeConfigAsync()
        {
            try
            {
                var jsonString = await File.ReadAllTextAsync(ConfigNames.GUILDEVENTS);

                var json = JsonConvert.DeserializeObject <AuditNotifier>(jsonString);
                _channelId = json._channelId;
                if (_channelId != null)
                {
                    _auditChannel = DefaultGuild.GetChannel((ulong)_channelId);
                }
                phraseResponses = json.phraseResponses;
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("Не удалось инициализировать конфиг аудит лога " + e.Message);
            }
        }
Пример #8
0
        protected override async Task InitializeConfigAsync()
        {
            try
            {
                var jsonString = await File.ReadAllTextAsync(ConfigNames.BIRTHDNOTY);

                var json = JsonConvert.DeserializeObject <BirthdayNotifier>(jsonString);
                bdChannelId = json.bdChannelId;
                if (bdChannelId != null)
                {
                    _birthdayChannel = DefaultGuild.GetChannel((ulong)json.bdChannelId);
                }
                notifyAdditionals = json.notifyAdditionals;
                membersBirthdays  = json.membersBirthdays;
            }
            catch (Exception e)
            {
                Console.WriteLine("Не удалось инициализировать конфиг оповещений дней рождения: " + e.Message);
            }
        }
Пример #9
0
        private async Task UserUpdated(DiscordClient sender, UserUpdateEventArgs e)
        {
            var member = await DefaultGuild.GetMemberAsync(e.UserAfter.Id);

            if (member == null)
            {
                return;
            }
            _entryBuilder = new DiscordEmbedBuilder();
            _entryBuilder.SetAuthor(e.UserAfter);
            _entryBuilder.SetTitle("Обновление параметров пользователя");

            if (e.UserBefore.Username != e.UserAfter.Username)
            {
                if (HasBlacklistedWord(e.UserAfter.Username))
                {
                    await _auditChannel.SendMessageAsync("Пользователь в теории забанен" + member.Mention);

                    //await member.BanAsync(reason: "Запрещённое слово в никнейме");
                    return;
                }
                _entryBuilder.AddBeforeAfter("Имя", e.UserBefore.Username, e.UserAfter.Username);
            }
            if (e.UserBefore.Discriminator != e.UserAfter.Discriminator)
            {
                _entryBuilder.AddBeforeAfter("Дискриминатор", e.UserBefore.Discriminator, e.UserAfter.Discriminator);
            }
            if (e.UserBefore.AvatarUrl != null && e.UserBefore.AvatarUrl != e.UserAfter.AvatarUrl)
            {
                _entryBuilder.SetTitle("Пользователь обновил аватар");
                try
                {
                    _entryBuilder.WithImageUrl(e.UserAfter.AvatarUrl);
                }
                catch
                {
                    _entryBuilder.SetDescription("Не удалось установить ссылку на изображение");
                }
            }
            await SendMessageToAuditAsync(embed : _entryBuilder);
        }
Пример #10
0
        protected override async Task InitializeConfigAsync()
        {
            try
            {
                var jsonString = await File.ReadAllTextAsync(ConfigNames.STREAMNOTY);

                var json = JsonConvert.DeserializeObject <StreamNotifier>(jsonString);
                defaultStartPhrase = json.defaultStartPhrase;
                defaultImageUrl    = json.defaultImageUrl;
                defaultEndPhrase   = json.defaultEndPhrase;
                if (json.notifyChannelId != null)
                {
                    notifyChannelId = json.notifyChannelId;
                    _notifyChannel  = DefaultGuild.GetChannel((ulong)notifyChannelId);
                }
                streamerRoleId = json.streamerRoleId;
                streamersInfo  = json.streamersInfo;
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("Не удалось инициализировать конфиг оповещений о стриме " + e.Message);
            }
        }
Пример #11
0
        protected override async Task InitializeConfigAsync()
        {
            try
            {
                var json = await File.ReadAllTextAsync(ConfigNames.ROLEGRANTER);

                var rgj = JsonConvert.DeserializeObject <RoleGranter>(json);
                channelId      = rgj.channelId;
                rolesMessageId = rgj.rolesMessageId;
                if (channelId != null && rolesMessageId != null)
                {
                    rolesMessage = await DefaultGuild.GetChannel((ulong)rgj.channelId).GetMessageAsync((ulong)rgj.rolesMessageId);
                }
                if (rgj.rolesInfo != null)
                {
                    rolesInfo = rgj.rolesInfo;
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("Не удалось инициализировать конфиг выдачи ролей " + e.Message);
            }
        }