private async Task SendPrivateMessage(ulong userId, string mangaName, MangaRelease mangaRelease) { try { var culture = CultureInfo.GetCultureInfo(UserLocalizerService.Languages.FirstOrDefault(x => x.Key == userId).Value ?? "en-US"); var message = string.Format( resourceManager.GetString(nameof(WebJobResource.NewRelease), culture), mangaName, mangaRelease.LastRelease, mangaRelease.MangaSite.ToString()); if (mangaRelease.MangaSite == MangaSite.TuManga || mangaRelease.MangaSite == MangaSite.UnionMangas) { message += Environment.NewLine + string.Format(resourceManager.GetString( nameof(WebJobResource.CheckItOnline), culture), mangaRelease.MangaSite == MangaSite.TuManga ? "https://tmofans.com/library/manga/{mangaSiteId}/discans" : "https://unionmangas.top/manga/{mangaRelease.MangaSiteId}"); } if (mangaRelease.MangaSite == MangaSite.UnionMangas || mangaRelease.MangaSite == MangaSite.InfoAnime) { message += Environment.NewLine + string.Format(resourceManager.GetString( nameof(WebJobResource.ScanInfo), culture), mangaRelease.ScanName, mangaRelease.ScanLink); } var channel = await discord.GetUser(userId).GetOrCreateDMChannelAsync(); await channel.SendMessageAsync(message); } catch (Exception e) when(e.Message.Contains("error 50007") || // Discord doc: Cannot send messages to this user e.Message.Contains("error 10013")) // Discord doc: Unknown user { // We will not send messages under those conditions. // It occurs when a user blocks Discans Bot, or when a user account is deleted. } catch (Exception e) { // todo: log } }
private async Task SendServerMessage(string user, string mangaName, ulong serverId, MangaRelease mangaRelease) { var culture = CultureInfo.GetCultureInfo(ServerLocalizerService.Languages.FirstOrDefault(x => x.Key == serverId).Value ?? "en-US"); var message = user + Environment.NewLine + string.Format(resourceManager.GetString( nameof(WebJobResource.NewRelease), culture), mangaName, mangaRelease.LastRelease, mangaRelease.MangaSite.ToString()); if (mangaRelease.MangaSite == MangaSite.TuManga || mangaRelease.MangaSite == MangaSite.UnionMangas) { message += Environment.NewLine + string.Format(resourceManager.GetString( nameof(WebJobResource.CheckItOnline), culture), mangaRelease.MangaSite == MangaSite.TuManga ? "https://tmofans.com/library/manga/{mangaSiteId}/discans" : "https://unionmangas.top/manga/{mangaRelease.MangaSiteId}"); } if (mangaRelease.MangaSite == MangaSite.UnionMangas || mangaRelease.MangaSite == MangaSite.InfoAnime) { message += Environment.NewLine + string.Format(resourceManager.GetString( nameof(WebJobResource.ScanInfo), culture), mangaRelease.ScanName, mangaRelease.ScanLink); } if (discord.GetGuild(serverId) == null) { await userAlertService.Remove(serverId); await serverAlertService.Remove(serverId); } var dbChannel = await channelService.GetByServerId(serverId); try { if (dbChannel != null) { await(discord .GetGuild(serverId) .GetChannel(dbChannel.ChannelId) as SocketTextChannel) .SendMessageAsync(message); } else { message += Environment.NewLine + Environment.NewLine + string.Format(resourceManager.GetString( nameof(WebJobResource.NoChannel), culture), $"{Consts.BotCommand}{ConfigureModule.ChannelCommand}"); await discord .GetGuild(serverId) .DefaultChannel .SendMessageAsync(message); } return; } catch { } foreach (var channel in discord.GetGuild(serverId).TextChannels) { try { await channel.SendMessageAsync(message); return; } catch { } } // todo: save notification to send again - discord server error maybe }