Example #1
0
        public async Task GetAnimeAsync(CommandContext ctx, [RemainingText] string name)
        {
            var animes = (await Kitsu.GetAnimeAsync(name)).Data.Take(10).ToList();
            var embed  = new DiscordEmbedBuilder()
                         .WithTitle("Select anime")
                         .WithFooter(ctx.Member.GetFullName(), ctx.Member.AvatarUrl);

            for (var i = 0; i < animes.Count; i++)
            {
                var a = animes[i];
                embed.AddField($"[{i + 1}] {a.Attributes.Titles.En}({a.Attributes.Titles.JaJp})",
                               $"{a.Attributes.AverageRating?.ToString() ?? "none"}");
            }
            var index = -1;

            ToDelete.Add(ctx.Message);
            ToDelete.Add(await ctx.RespondAsync(embed: embed));
            ToDelete.Add((await Interactivity.WaitForMessageAsync(
                              x => int.TryParse(x.Content, out index) &&
                              index > 0 &&
                              index <= 10 ||
                              index == -1,
                              TimeSpan.FromSeconds(30))).Message);
            if (index == -1)
            {
                return;
            }
            var anime = animes[index - 1];

            embed.WithTitle($"{anime.Attributes.Titles.En}({anime.Attributes.Titles.EnJp})");
            embed.ClearFields();
            embed.Description = anime.Attributes.Synopsis;
            await ctx.RespondAsync(embed : embed);
        }
Example #2
0
 public void SetUp()
 {
     Program.UserSettings = Settings.Load();
     _credentials         = new UserPass("*****@*****.**", "MWhXDyAUQdxa");     // 182479
     Assert.AreEqual(_credentials.Username, "*****@*****.**");
     Assert.AreEqual(_credentials.Password, "MWhXDyAUQdxa");
     _kitsu = new Kitsu(_credentials);
     Assert.True(_kitsu.VerifyCredentials().Result);
     Assert.AreEqual(_kitsu.Username, "trackrtest");
 }
Example #3
0
        private async void OnOkButton(object o, EventArgs args)
        {
            UserPass cred;

            Api.Api api;
            bool    res;          // result of credential verification

            _okButton.Sensitive = false;
            // what type of account are we recreating?
            switch (_type.ActiveText)
            {
            case "MyAnimeList":
            case "Kitsu":
                if (_type.ActiveText == "MyAnimeList")
                {
                    cred = new UserPass(_username.Text, _password.Text);
                    api  = new MyAnimeList(cred);
                }
                else if (_type.ActiveText == "Kitsu")
                {
                    if (!_editing)
                    {
                        _email = _username.Text;
                    }
                    cred = new UserPass(_email, _password.Text);
                    api  = new Kitsu(cred);
                }
                else
                {
                    throw new NotImplementedException();
                }

                try {
                    res = Task.Run(() => api.VerifyCredentials()).Result;
                }
                // ApiRequestException, WebException...
                catch (Exception e) {
                    var ed = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.OkCancel,
                                               e.InnerException?.Message ?? e.Message)
                    {
                        WindowPosition = WindowPosition.Center
                    };
                    var ret = ed.Run();
                    ed.Destroy();
                    Debug.WriteLine("[Exception] " + (e.InnerException?.Message ?? e.Message));
                    Debug.WriteLineIf(e.InnerException != null, e.InnerException?.StackTrace);

                    if (ret == (int)ResponseType.Cancel)
                    {
                        Respond(ResponseType.Reject);
                    }
                    _okButton.Sensitive = true;
                    return;
                }

                if (res)
                {
                    if (api.GetType() == typeof(Kitsu))
                    {
                        Result = new Account(api.Name, api.Username, cred, ((Kitsu)api).Email);
                    }
                    else
                    {
                        Result = new Account(api.Name, api.Username, cred);
                    }
                    Respond(ResponseType.Accept);
                }
                else                           // Invalid username or password!
                {
                    var ed = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.OkCancel,
                                               "Invalid username or password.")
                    {
                        WindowPosition = WindowPosition.Center
                    };
                    var ret = ed.Run();
                    ed.Destroy();
                    if (ret == (int)ResponseType.Cancel)
                    {
                        Respond(ResponseType.Reject);
                    }
                    else
                    {
                        _okButton.Sensitive = true;
                    }
                }
                break;

            case "AniList":
                var pin = RequestAniListToken();
                cred = new UserPass(null, pin);
                var account = new Account(AniList.Identifier, null, cred);
                api = new AniList(account);
                ((AniList)api).TokenExpired += Program.OnAniListTokenExpired;

                try {
                    res = await api.VerifyCredentials();
                }
                catch (Exception e) {
                    var ed = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok,
                                               e.InnerException?.Message ?? e.Message)
                    {
                        WindowPosition = WindowPosition.Center
                    };
                    ed.Run();
                    ed.Destroy();
                    Respond(ResponseType.Reject);
                    Debug.WriteLine("[Exception] " + (e.InnerException?.Message ?? e.Message));
                    return;
                }

                if (res)
                {
                    account.Username = api.Username;
                    Result           = account;
                    Respond(ResponseType.Accept);
                }
                else
                {
                    var ed = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Error, ButtonsType.Ok,
                                               "An invalid authentication pin was entered.")
                    {
                        WindowPosition = WindowPosition.Center
                    };
                    ed.Run();
                    ed.Destroy();
                    Respond(ResponseType.Reject);
                }
                break;

            default:
                Debug.Fail($"The account type {_type.ActiveText} has not been implemented.");
                Respond(ResponseType.Reject);
                break;
            }
        }