Renamed to google service and using urlshortner api lib too. .roles are ordered by position now.
This commit is contained in:
		@@ -26,7 +26,7 @@ $@"`Title:` {WebUtility.HtmlDecode(Title)} {(string.IsNullOrEmpty(OriginalTitle)
 | 
			
		||||
`Genre:` {GenresAsString}
 | 
			
		||||
`Link:` <{ImdbURL}>
 | 
			
		||||
`Plot:` {System.Net.WebUtility.HtmlDecode(Plot.TrimTo(500))}
 | 
			
		||||
`img:` " + Poster.ShortenUrl().Result;
 | 
			
		||||
`img:` " + Poster;
 | 
			
		||||
        public string GenresAsString =>
 | 
			
		||||
                string.Join(", ", Genres);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -20,11 +20,11 @@ namespace NadekoBot.Modules.Searches
 | 
			
		||||
    [Module("~", AppendSpace = false)]
 | 
			
		||||
    public partial class Searches : DiscordModule
 | 
			
		||||
    {
 | 
			
		||||
        private IYoutubeService _yt { get; }
 | 
			
		||||
        private IGoogleApiService _google { get; }
 | 
			
		||||
 | 
			
		||||
        public Searches(ILocalization loc, CommandService cmds, IBotConfiguration config, DiscordSocketClient client, IYoutubeService youtube) : base(loc, cmds, config, client)
 | 
			
		||||
        public Searches(ILocalization loc, CommandService cmds, IBotConfiguration config, DiscordSocketClient client, IGoogleApiService youtube) : base(loc, cmds, config, client)
 | 
			
		||||
        {
 | 
			
		||||
            _yt = youtube;
 | 
			
		||||
            _google = youtube;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [LocalizedCommand, LocalizedDescription, LocalizedSummary]
 | 
			
		||||
@@ -54,7 +54,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
 | 
			
		||||
        {
 | 
			
		||||
            var channel = imsg.Channel as ITextChannel;
 | 
			
		||||
            if (!(await ValidateQuery(imsg.Channel as ITextChannel, query).ConfigureAwait(false))) return;
 | 
			
		||||
            var result = (await _yt.FindVideosByKeywordsAsync(query, 1)).FirstOrDefault();
 | 
			
		||||
            var result = (await _google.FindVideosByKeywordsAsync(query, 1)).FirstOrDefault();
 | 
			
		||||
            if (string.IsNullOrWhiteSpace(result))
 | 
			
		||||
            {
 | 
			
		||||
                await channel.SendMessageAsync("No results found for that query.");
 | 
			
		||||
@@ -183,7 +183,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
 | 
			
		||||
            if (string.IsNullOrWhiteSpace(ffs))
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            await channel.SendMessageAsync(await $"<http://lmgtfy.com/?q={ Uri.EscapeUriString(ffs) }>".ShortenUrl())
 | 
			
		||||
            await channel.SendMessageAsync(await _google.ShortenUrl($"<http://lmgtfy.com/?q={ Uri.EscapeUriString(ffs) }>"))
 | 
			
		||||
                           .ConfigureAwait(false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -270,7 +270,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
 | 
			
		||||
                    var sb = new System.Text.StringBuilder();
 | 
			
		||||
                    sb.AppendLine($"`Term:` {items["list"][0]["word"].ToString()}");
 | 
			
		||||
                    sb.AppendLine($"`Definition:` {items["list"][0]["definition"].ToString()}");
 | 
			
		||||
                    sb.Append($"`Link:` <{await items["list"][0]["permalink"].ToString().ShortenUrl().ConfigureAwait(false)}>");
 | 
			
		||||
                    sb.Append($"`Link:` <{await _google.ShortenUrl(items["list"][0]["permalink"].ToString()).ConfigureAwait(false)}>");
 | 
			
		||||
                    await channel.SendMessageAsync(sb.ToString());
 | 
			
		||||
                }
 | 
			
		||||
                catch
 | 
			
		||||
@@ -306,7 +306,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
 | 
			
		||||
                var items = JObject.Parse(res);
 | 
			
		||||
                var str = $@"`Hashtag:` {items["defs"]["def"]["hashtag"].ToString()}
 | 
			
		||||
`Definition:` {items["defs"]["def"]["text"].ToString()}
 | 
			
		||||
`Link:` <{await items["defs"]["def"]["uri"].ToString().ShortenUrl().ConfigureAwait(false)}>";
 | 
			
		||||
`Link:` <{await _google.ShortenUrl(items["defs"]["def"]["uri"].ToString()).ConfigureAwait(false)}>";
 | 
			
		||||
                await channel.SendMessageAsync(str);
 | 
			
		||||
            }
 | 
			
		||||
            catch
 | 
			
		||||
@@ -463,7 +463,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
 | 
			
		||||
                await channel.SendMessageAsync("Invalid user specified.").ConfigureAwait(false);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            await channel.SendMessageAsync(await usr.AvatarUrl.ShortenUrl()).ConfigureAwait(false);
 | 
			
		||||
            await channel.SendMessageAsync(await _google.ShortenUrl(usr.AvatarUrl).ConfigureAwait(false)).ConfigureAwait(false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static async Task<string> GetSafebooruImageLink(string tag)
 | 
			
		||||
 
 | 
			
		||||
@@ -121,11 +121,11 @@ namespace NadekoBot.Modules.Utility
 | 
			
		||||
            var guild = (msg.Channel as ITextChannel).Guild;
 | 
			
		||||
            if (target != null)
 | 
			
		||||
            {
 | 
			
		||||
                await msg.Reply($"`List of roles for **{target.Username}**:` \n• " + string.Join("\n• ", target.Roles.Except(new[] { guild.EveryoneRole })));
 | 
			
		||||
                await msg.Reply($"`List of roles for **{target.Username}**:` \n• " + string.Join("\n• ", target.Roles.Except(new[] { guild.EveryoneRole }).OrderBy(r => r.Position)));
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                await msg.Reply("`List of roles:` \n• " + string.Join("\n• ", (msg.Channel as ITextChannel).Guild.Roles.Except(new[] { guild.EveryoneRole })));
 | 
			
		||||
                await msg.Reply("`List of roles:` \n• " + string.Join("\n• ", (msg.Channel as ITextChannel).Guild.Roles.Except(new[] { guild.EveryoneRole }).OrderBy(r=>r.Position)));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,7 @@ namespace NadekoBot
 | 
			
		||||
            depMap.Add<IBotConfiguration>(Config);
 | 
			
		||||
            depMap.Add<DiscordSocketClient>(Client);
 | 
			
		||||
            depMap.Add<CommandService>(Commands);
 | 
			
		||||
            depMap.Add<IYoutubeService>(Youtube);
 | 
			
		||||
            depMap.Add<IGoogleApiService>(Youtube);
 | 
			
		||||
 | 
			
		||||
            //connect
 | 
			
		||||
            await Client.LoginAsync(TokenType.Bot, Credentials.Token);
 | 
			
		||||
 
 | 
			
		||||
@@ -3,10 +3,12 @@ using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Services
 | 
			
		||||
{
 | 
			
		||||
    public interface IYoutubeService
 | 
			
		||||
    public interface IGoogleApiService
 | 
			
		||||
    {
 | 
			
		||||
        Task<IEnumerable<string>> FindVideosByKeywordsAsync(string keywords, int count = 1);
 | 
			
		||||
        Task<IEnumerable<string>> FindPlaylistIdsByKeywordsAsync(string keywords, int count = 1);
 | 
			
		||||
        Task<IEnumerable<string>> FindRelatedVideosAsync(string url, int count = 1);
 | 
			
		||||
 | 
			
		||||
        Task<string> ShortenUrl(string url);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -5,26 +5,29 @@ using System.Threading.Tasks;
 | 
			
		||||
using Google.Apis.YouTube.v3;
 | 
			
		||||
using Google.Apis.Services;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using System.Diagnostics.Contracts;
 | 
			
		||||
using Google.Apis.Urlshortener.v1;
 | 
			
		||||
using Google.Apis.Urlshortener.v1.Data;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Services.Impl
 | 
			
		||||
{
 | 
			
		||||
    public class YoutubeService : IYoutubeService
 | 
			
		||||
    public class GoogleApiService : IGoogleApiService
 | 
			
		||||
    {
 | 
			
		||||
        private YouTubeService yt;
 | 
			
		||||
        private UrlshortenerService sh;
 | 
			
		||||
 | 
			
		||||
        public YoutubeService()
 | 
			
		||||
        public GoogleApiService()
 | 
			
		||||
        {
 | 
			
		||||
            yt = new YouTubeService(new BaseClientService.Initializer {
 | 
			
		||||
            var bcs = new BaseClientService.Initializer
 | 
			
		||||
            {
 | 
			
		||||
                ApplicationName = "Nadeko Bot",
 | 
			
		||||
                ApiKey = NadekoBot.Credentials.GoogleApiKey
 | 
			
		||||
            });
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            yt = new YouTubeService(bcs);
 | 
			
		||||
            sh = new UrlshortenerService(bcs);
 | 
			
		||||
        }
 | 
			
		||||
        public async Task<IEnumerable<string>> FindPlaylistIdsByKeywordsAsync(string keywords, int count = 1)
 | 
			
		||||
        {
 | 
			
		||||
            //Contract.Requires<ArgumentNullException>(!string.IsNullOrWhiteSpace(keywords));
 | 
			
		||||
            //Contract.Requires<ArgumentOutOfRangeException>(count > 0);
 | 
			
		||||
 | 
			
		||||
            if (string.IsNullOrWhiteSpace(keywords))
 | 
			
		||||
                throw new ArgumentNullException(nameof(keywords));
 | 
			
		||||
 | 
			
		||||
@@ -77,5 +80,14 @@ namespace NadekoBot.Services.Impl
 | 
			
		||||
            query.Type = "video";
 | 
			
		||||
            return (await query.ExecuteAsync()).Items.Select(i => "http://www.youtube.com/watch?v=" + i.Id.VideoId);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<string> ShortenUrl(string url)
 | 
			
		||||
        {
 | 
			
		||||
            if (string.IsNullOrWhiteSpace(url))
 | 
			
		||||
                throw new ArgumentNullException(nameof(url));
 | 
			
		||||
 | 
			
		||||
            var response = await sh.Url.Insert(new Url { LongUrl = url }).ExecuteAsync();
 | 
			
		||||
            return response.Id;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -81,39 +81,6 @@ namespace NadekoBot.Extensions
 | 
			
		||||
            return ch.SendTableAsync("", items, howToPrint, columns);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static async Task<string> ShortenUrl(this string url)
 | 
			
		||||
        {
 | 
			
		||||
            if (string.IsNullOrWhiteSpace(NadekoBot.Credentials.GoogleApiKey)) return url;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                var httpWebRequest =
 | 
			
		||||
                    (HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url?key=" +
 | 
			
		||||
                                                       NadekoBot.Credentials.GoogleApiKey);
 | 
			
		||||
                httpWebRequest.ContentType = "application/json";
 | 
			
		||||
                httpWebRequest.Method = "POST";
 | 
			
		||||
 | 
			
		||||
                using (var streamWriter = new StreamWriter(await httpWebRequest.GetRequestStreamAsync().ConfigureAwait(false)))
 | 
			
		||||
                {
 | 
			
		||||
                    var json = "{\"longUrl\":\"" + Uri.EscapeDataString(url) + "\"}";
 | 
			
		||||
                    streamWriter.Write(json);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                var httpResponse = (await httpWebRequest.GetResponseAsync().ConfigureAwait(false)) as HttpWebResponse;
 | 
			
		||||
                var responseStream = httpResponse.GetResponseStream();
 | 
			
		||||
                using (var streamReader = new StreamReader(responseStream))
 | 
			
		||||
                {
 | 
			
		||||
                    var responseText = await streamReader.ReadToEndAsync().ConfigureAwait(false);
 | 
			
		||||
                    return Regex.Match(responseText, @"""id"": ?""(?<id>.+)""").Groups["id"].Value;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                Console.WriteLine("Shortening of this url failed: " + url);
 | 
			
		||||
                Console.WriteLine(ex.ToString());
 | 
			
		||||
                return url;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// returns an IEnumerable with randomized element order
 | 
			
		||||
        /// </summary>
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@
 | 
			
		||||
    "Discord.Net.Commands": "1.0.0-dev",
 | 
			
		||||
    "System.Resources.ResourceWriter": "4.0.0-beta-22816",
 | 
			
		||||
    "Google.Apis.YouTube.v3": "1.15.0.582",
 | 
			
		||||
    "Google.Apis.Urlshortener.v1": "1.15.0.138",
 | 
			
		||||
    "System.Diagnostics.Contracts": "4.0.1",
 | 
			
		||||
    "NLog": "4.4.0-betaV15"
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
@@ -88,6 +88,19 @@
 | 
			
		||||
          "lib/netstandard1.3/Google.Apis.Core.dll": {}
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "Google.Apis.Urlshortener.v1/1.15.0.138": {
 | 
			
		||||
        "type": "package",
 | 
			
		||||
        "dependencies": {
 | 
			
		||||
          "Google.Apis": "1.15.0",
 | 
			
		||||
          "Google.Apis.Auth": "1.15.0"
 | 
			
		||||
        },
 | 
			
		||||
        "compile": {
 | 
			
		||||
          "lib/netstandard1.3/Google.Apis.Urlshortener.v1.dll": {}
 | 
			
		||||
        },
 | 
			
		||||
        "runtime": {
 | 
			
		||||
          "lib/netstandard1.3/Google.Apis.Urlshortener.v1.dll": {}
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "Google.Apis.YouTube.v3/1.15.0.582": {
 | 
			
		||||
        "type": "package",
 | 
			
		||||
        "dependencies": {
 | 
			
		||||
@@ -2654,6 +2667,24 @@
 | 
			
		||||
        "lib/portable-net45+sl50+netcore45+wpa81+wp8/Google.Apis.Core.xml"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "Google.Apis.Urlshortener.v1/1.15.0.138": {
 | 
			
		||||
      "sha512": "67USnpqrk8tWO3LAgaK9qDQT6h8A7i7eUIOKm+OISThZoQuHiLCn6dbg46FVb597LUh57AxClSSbhnweYcYC3Q==",
 | 
			
		||||
      "type": "package",
 | 
			
		||||
      "path": "Google.Apis.Urlshortener.v1/1.15.0.138",
 | 
			
		||||
      "files": [
 | 
			
		||||
        "Google.Apis.Urlshortener.v1.1.15.0.138.nupkg.sha512",
 | 
			
		||||
        "Google.Apis.Urlshortener.v1.nuspec",
 | 
			
		||||
        "lib/netstandard1.3/Google.Apis.Urlshortener.v1.dll",
 | 
			
		||||
        "lib/netstandard1.3/Google.Apis.Urlshortener.v1.pdb",
 | 
			
		||||
        "lib/netstandard1.3/Google.Apis.Urlshortener.v1.xml",
 | 
			
		||||
        "lib/portable-net40+sl50+netcore45+wpa81+wp8/Google.Apis.Urlshortener.v1.dll",
 | 
			
		||||
        "lib/portable-net40+sl50+netcore45+wpa81+wp8/Google.Apis.Urlshortener.v1.pdb",
 | 
			
		||||
        "lib/portable-net40+sl50+netcore45+wpa81+wp8/Google.Apis.Urlshortener.v1.xml",
 | 
			
		||||
        "lib/portable-net45+netcore45+wpa81+wp8/Google.Apis.Urlshortener.v1.dll",
 | 
			
		||||
        "lib/portable-net45+netcore45+wpa81+wp8/Google.Apis.Urlshortener.v1.pdb",
 | 
			
		||||
        "lib/portable-net45+netcore45+wpa81+wp8/Google.Apis.Urlshortener.v1.xml"
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "Google.Apis.YouTube.v3/1.15.0.582": {
 | 
			
		||||
      "sha512": "isR8FdI417PKLgLlNdOVDhduO+8yqPJ+vfID1Zx0MjAa/y3q655Plk2E/KNmsrjvXkqSSWwDCQHPz/Q1fat4tA==",
 | 
			
		||||
      "type": "package",
 | 
			
		||||
@@ -7855,6 +7886,7 @@
 | 
			
		||||
    "": [
 | 
			
		||||
      "Discord.Net >= 1.0.0-dev",
 | 
			
		||||
      "Discord.Net.Commands >= 1.0.0-dev",
 | 
			
		||||
      "Google.Apis.Urlshortener.v1 >= 1.15.0.138",
 | 
			
		||||
      "Google.Apis.YouTube.v3 >= 1.15.0.582",
 | 
			
		||||
      "Microsoft.Extensions.DependencyInjection >= 1.0.0",
 | 
			
		||||
      "Microsoft.Extensions.DependencyInjection.Abstractions >= 1.0.0",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user