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)); } }
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); } }
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); }
private async Task <DiscordAuditLogEntry> GetNewEntryAsync() { try { var audit = await DefaultGuild.GetAuditLogsAsync(1); _newEntry = audit.First(); return(_newEntry); } catch { _newEntry = null; return(_newEntry); } }
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()); }
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); }
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); } }
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); } }
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); }
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); } }
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); } }