Fixed crash, fixed imdb
This commit is contained in:
		@@ -35,6 +35,7 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
                if (channel == null)
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                //todo cache this
 | 
			
		||||
                bool shouldDelete;
 | 
			
		||||
                using (var uow = DbHandler.UnitOfWork())
 | 
			
		||||
                {
 | 
			
		||||
@@ -695,12 +696,14 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
            await channel.SendMessageAsync(send).ConfigureAwait(false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        IGuild nadekoSupportServer;
 | 
			
		||||
        [NadekoCommand, Usage, Description, Aliases]
 | 
			
		||||
        [RequireContext(ContextType.Guild)]
 | 
			
		||||
        public async Task Donators(IUserMessage umsg)
 | 
			
		||||
        {
 | 
			
		||||
            var channel = (ITextChannel)umsg.Channel;
 | 
			
		||||
            IEnumerable<Donator> donatorsOrdered;
 | 
			
		||||
 | 
			
		||||
            using (var uow = DbHandler.UnitOfWork())
 | 
			
		||||
            {
 | 
			
		||||
                donatorsOrdered = uow.Donators.GetDonatorsOrdered();
 | 
			
		||||
@@ -708,6 +711,18 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
 | 
			
		||||
            string str = $"**Thanks to the people listed below for making this project happen!**\n";
 | 
			
		||||
            await channel.SendMessageAsync(str + string.Join("⭐", donatorsOrdered.Select(d => d.Name))).ConfigureAwait(false);
 | 
			
		||||
            
 | 
			
		||||
            nadekoSupportServer = nadekoSupportServer ?? NadekoBot.Client.GetGuild(117523346618318850);
 | 
			
		||||
 | 
			
		||||
            if (nadekoSupportServer == null)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            var patreonRole = nadekoSupportServer.GetRole(236667642088259585);
 | 
			
		||||
            if (patreonRole == null)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            var usrs = nadekoSupportServer.GetUsers().Where(u => u.Roles.Contains(patreonRole));
 | 
			
		||||
            await channel.SendMessageAsync("\n`Patreon supporters:`\n" + string.Join("⭐", usrs.Select(d => d.Username))).ConfigureAwait(false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,6 @@ namespace NadekoBot.Modules.Administration
 | 
			
		||||
                        {
 | 
			
		||||
                            conf = uow.GuildConfigs.For(user.Guild.Id);
 | 
			
		||||
                        }
 | 
			
		||||
                        var aarType = conf.AutoAssignRoleId.GetType();
 | 
			
		||||
 | 
			
		||||
                        if (conf.AutoAssignRoleId == 0)
 | 
			
		||||
                            return;
 | 
			
		||||
 
 | 
			
		||||
@@ -74,17 +74,9 @@ namespace NadekoBot.Modules.Searches.IMDB
 | 
			
		||||
                mov.OriginalTitle = Match(@"title-extra"">(.*?)<", html);
 | 
			
		||||
                mov.Year = Match(@"<title>.*?\(.*?(\d{4}).*?\).*?</title>", Match(@"(<title>.*?</title>)", html));
 | 
			
		||||
                mov.Rating = Match(@"<b>(\d.\d)/10</b>", html);
 | 
			
		||||
                mov.Genres = MatchAll(@"<a.*?>(.*?)</a>", Match(@"Genre.?:(.*?)(</div>|See more)", html)).Cast<string>().ToList();
 | 
			
		||||
                mov.Plot = Match(@"Plot:</h5>.*?<div class=""info-content"">(.*?)(<a|</div)", html);
 | 
			
		||||
                mov.Poster = Match(@"<div class=""photo"">.*?<a name=""poster"".*?><img.*?src=""(.*?)"".*?</div>", html);
 | 
			
		||||
                if (!string.IsNullOrEmpty(mov.Poster) && mov.Poster.IndexOf("media-imdb.com") > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    mov.Poster = Regex.Replace(mov.Poster, @"_V1.*?.jpg", "_V1._SY200.jpg");
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    mov.Poster = string.Empty;
 | 
			
		||||
                }
 | 
			
		||||
                mov.Genres = MatchAll(@"<a.*?>(.*?)</a>", Match(@"Genre.?:((.|\n)*?)(<\/div>|See more)", html)).Cast<string>().ToList();
 | 
			
		||||
                mov.Plot = Match(@"Plot:</h5>\n<div class=""info-content"">\n((.|\n)*?)(<a|</div)", html);
 | 
			
		||||
                mov.Poster = Match(@"<a name=""poster"".*src=""(.*)""", html);
 | 
			
		||||
                mov.ImdbURL = "http://www.imdb.com/title/" + mov.Id + "/";
 | 
			
		||||
                if (GetExtraInfo)
 | 
			
		||||
                {
 | 
			
		||||
@@ -147,7 +139,8 @@ namespace NadekoBot.Modules.Searches.IMDB
 | 
			
		||||
        //Match single instance
 | 
			
		||||
        private static string Match(string regex, string html, int i = 1)
 | 
			
		||||
        {
 | 
			
		||||
            return new Regex(regex, RegexOptions.Multiline | RegexOptions.IgnoreCase).Match(html).Groups[i].ToString().Trim();
 | 
			
		||||
            var m = new Regex(regex, RegexOptions.Multiline).Match(html);
 | 
			
		||||
            return m.Groups[i].Value.Trim();
 | 
			
		||||
        }
 | 
			
		||||
        //Match all instances and return as List<string>
 | 
			
		||||
        private static List<string> MatchAll(string regex, string html, int i = 1)
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
`Poster:` " + NadekoBot.Google.ShortenUrl(Poster).GetAwaiter().GetResult();
 | 
			
		||||
        public string GenresAsString =>
 | 
			
		||||
                string.Join(", ", Genres);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,10 @@ $@"🌍 **Weather for** 【{obj["target"]}】
 | 
			
		||||
            await channel.SendMessageAsync(result).ConfigureAwait(false);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //todo move to omdb 
 | 
			
		||||
        //              |
 | 
			
		||||
        //              v
 | 
			
		||||
        //{"Title":"Shutter Island","Year":"2010","Rated":"R","Released":"19 Feb 2010","Runtime":"138 min","Genre":"Mystery, Thriller","Director":"Martin Scorsese","Writer":"Laeta Kalogridis (screenplay), Dennis Lehane (novel)","Actors":"Leonardo DiCaprio, Mark Ruffalo, Ben Kingsley, Max von Sydow","Plot":"In 1954, a U.S. marshal investigates the disappearance of a murderess who escaped from a hospital for the criminally insane.","Language":"English, German","Country":"USA","Awards":"8 wins & 59 nominations.","Poster":"https://images-na.ssl-images-amazon.com/images/M/MV5BMTMxMTIyNzMxMV5BMl5BanBnXkFtZTcwOTc4OTI3Mg@@._V1_SX300.jpg","Metascore":"63","imdbRating":"8.1","imdbVotes":"798,447","imdbID":"tt1130884","Type":"movie","Response":"True"}
 | 
			
		||||
        [NadekoCommand, Usage, Description, Aliases]
 | 
			
		||||
        [RequireContext(ContextType.Guild)]
 | 
			
		||||
        public async Task Imdb(IUserMessage umsg, [Remainder] string query = null)
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ using Google.Apis.Services;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
using Google.Apis.Urlshortener.v1;
 | 
			
		||||
using Google.Apis.Urlshortener.v1.Data;
 | 
			
		||||
using NLog;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Services.Impl
 | 
			
		||||
{
 | 
			
		||||
@@ -14,6 +15,7 @@ namespace NadekoBot.Services.Impl
 | 
			
		||||
    {
 | 
			
		||||
        private YouTubeService yt;
 | 
			
		||||
        private UrlshortenerService sh;
 | 
			
		||||
        private Logger _log { get; }
 | 
			
		||||
 | 
			
		||||
        public GoogleApiService()
 | 
			
		||||
        {
 | 
			
		||||
@@ -23,6 +25,8 @@ namespace NadekoBot.Services.Impl
 | 
			
		||||
                ApiKey = NadekoBot.Credentials.GoogleApiKey
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            _log = LogManager.GetCurrentClassLogger();
 | 
			
		||||
 | 
			
		||||
            yt = new YouTubeService(bcs);
 | 
			
		||||
            sh = new UrlshortenerService(bcs);
 | 
			
		||||
        }
 | 
			
		||||
@@ -85,9 +89,16 @@ namespace NadekoBot.Services.Impl
 | 
			
		||||
        {
 | 
			
		||||
            if (string.IsNullOrWhiteSpace(url))
 | 
			
		||||
                throw new ArgumentNullException(nameof(url));
 | 
			
		||||
 | 
			
		||||
            var response = await sh.Url.Insert(new Url { LongUrl = url }).ExecuteAsync();
 | 
			
		||||
            return response.Id;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                var response = await sh.Url.Insert(new Url { LongUrl = url }).ExecuteAsync();
 | 
			
		||||
                return response.Id;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                _log.Warn(ex);
 | 
			
		||||
                return url;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<IEnumerable<string>> GetPlaylistTracksAsync(string playlistId, int count = 50)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user