Esempio n. 1
0
        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
            }
        }
Esempio n. 2
0
        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
        }