small fix+ codestyle change
This commit is contained in:
parent
5471012504
commit
df32d2cf13
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,6 +1,3 @@
|
|||||||
[submodule "discord.net"]
|
[submodule "discord.net"]
|
||||||
path = discord.net
|
path = discord.net
|
||||||
url = git://github.com/rogueexception/discord.net.git
|
url = git://github.com/rogueexception/discord.net.git
|
||||||
[submodule "Discord.Net"]
|
|
||||||
path = Discord.Net
|
|
||||||
url = https://github.com/RogueException/Discord.Net
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using NadekoBot.Extensions;
|
using NadekoBot.Classes.JSONModels;
|
||||||
|
using NadekoBot.Extensions;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using System;
|
using System;
|
||||||
@ -10,34 +11,41 @@ using System.Net.Http;
|
|||||||
using System.Security.Authentication;
|
using System.Security.Authentication;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using NadekoBot.Classes.JSONModels;
|
|
||||||
|
|
||||||
namespace NadekoBot.Classes {
|
namespace NadekoBot.Classes
|
||||||
public enum RequestHttpMethod {
|
{
|
||||||
|
public enum RequestHttpMethod
|
||||||
|
{
|
||||||
Get,
|
Get,
|
||||||
Post
|
Post
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class SearchHelper {
|
public static class SearchHelper
|
||||||
|
{
|
||||||
private static DateTime lastRefreshed = DateTime.MinValue;
|
private static DateTime lastRefreshed = DateTime.MinValue;
|
||||||
private static string token { get; set; } = "";
|
private static string token { get; set; } = "";
|
||||||
|
|
||||||
public static async Task<Stream> GetResponseStreamAsync(string url,
|
public static async Task<Stream> GetResponseStreamAsync(string url,
|
||||||
IEnumerable<KeyValuePair<string, string>> headers = null, RequestHttpMethod method = RequestHttpMethod.Get) {
|
IEnumerable<KeyValuePair<string, string>> headers = null, RequestHttpMethod method = RequestHttpMethod.Get)
|
||||||
|
{
|
||||||
if (string.IsNullOrWhiteSpace(url))
|
if (string.IsNullOrWhiteSpace(url))
|
||||||
throw new ArgumentNullException(nameof(url));
|
throw new ArgumentNullException(nameof(url));
|
||||||
var httpClient = new HttpClient();
|
var httpClient = new HttpClient();
|
||||||
switch (method) {
|
switch (method)
|
||||||
|
{
|
||||||
case RequestHttpMethod.Get:
|
case RequestHttpMethod.Get:
|
||||||
if (headers != null) {
|
if (headers != null)
|
||||||
foreach (var header in headers) {
|
{
|
||||||
|
foreach (var header in headers)
|
||||||
|
{
|
||||||
httpClient.DefaultRequestHeaders.TryAddWithoutValidation(header.Key, header.Value);
|
httpClient.DefaultRequestHeaders.TryAddWithoutValidation(header.Key, header.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return await httpClient.GetStreamAsync(url);
|
return await httpClient.GetStreamAsync(url);
|
||||||
case RequestHttpMethod.Post:
|
case RequestHttpMethod.Post:
|
||||||
FormUrlEncodedContent formContent = null;
|
FormUrlEncodedContent formContent = null;
|
||||||
if (headers != null) {
|
if (headers != null)
|
||||||
|
{
|
||||||
formContent = new FormUrlEncodedContent(headers);
|
formContent = new FormUrlEncodedContent(headers);
|
||||||
}
|
}
|
||||||
var message = await httpClient.PostAsync(url, formContent);
|
var message = await httpClient.PostAsync(url, formContent);
|
||||||
@ -49,14 +57,17 @@ namespace NadekoBot.Classes {
|
|||||||
|
|
||||||
public static async Task<string> GetResponseStringAsync(string url,
|
public static async Task<string> GetResponseStringAsync(string url,
|
||||||
IEnumerable<KeyValuePair<string, string>> headers = null,
|
IEnumerable<KeyValuePair<string, string>> headers = null,
|
||||||
RequestHttpMethod method = RequestHttpMethod.Get) {
|
RequestHttpMethod method = RequestHttpMethod.Get)
|
||||||
|
{
|
||||||
|
|
||||||
using (var streamReader = new StreamReader(await GetResponseStreamAsync(url, headers, method))) {
|
using (var streamReader = new StreamReader(await GetResponseStreamAsync(url, headers, method)))
|
||||||
|
{
|
||||||
return await streamReader.ReadToEndAsync();
|
return await streamReader.ReadToEndAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<AnimeResult> GetAnimeData(string query) {
|
public static async Task<AnimeResult> GetAnimeData(string query)
|
||||||
|
{
|
||||||
if (string.IsNullOrWhiteSpace(query))
|
if (string.IsNullOrWhiteSpace(query))
|
||||||
throw new ArgumentNullException(nameof(query));
|
throw new ArgumentNullException(nameof(query));
|
||||||
|
|
||||||
@ -77,7 +88,8 @@ namespace NadekoBot.Classes {
|
|||||||
return await Task.Run(() => JsonConvert.DeserializeObject<AnimeResult>(content));
|
return await Task.Run(() => JsonConvert.DeserializeObject<AnimeResult>(content));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<MangaResult> GetMangaData(string query) {
|
public static async Task<MangaResult> GetMangaData(string query)
|
||||||
|
{
|
||||||
if (string.IsNullOrWhiteSpace(query))
|
if (string.IsNullOrWhiteSpace(query))
|
||||||
throw new ArgumentNullException(nameof(query));
|
throw new ArgumentNullException(nameof(query));
|
||||||
|
|
||||||
@ -98,10 +110,12 @@ namespace NadekoBot.Classes {
|
|||||||
return await Task.Run(() => JsonConvert.DeserializeObject<MangaResult>(content));
|
return await Task.Run(() => JsonConvert.DeserializeObject<MangaResult>(content));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task RefreshAnilistToken() {
|
private static async Task RefreshAnilistToken()
|
||||||
|
{
|
||||||
if (DateTime.Now - lastRefreshed > TimeSpan.FromMinutes(29))
|
if (DateTime.Now - lastRefreshed > TimeSpan.FromMinutes(29))
|
||||||
lastRefreshed = DateTime.Now;
|
lastRefreshed = DateTime.Now;
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var headers = new Dictionary<string, string> {
|
var headers = new Dictionary<string, string> {
|
||||||
@ -115,13 +129,15 @@ namespace NadekoBot.Classes {
|
|||||||
token = JObject.Parse(content)["access_token"].ToString();
|
token = JObject.Parse(content)["access_token"].ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<bool> ValidateQuery(Discord.Channel ch, string query) {
|
public static async Task<bool> ValidateQuery(Discord.Channel ch, string query)
|
||||||
|
{
|
||||||
if (!string.IsNullOrEmpty(query.Trim())) return true;
|
if (!string.IsNullOrEmpty(query.Trim())) return true;
|
||||||
await ch.Send("Please specify search parameters.");
|
await ch.Send("Please specify search parameters.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<string> FindYoutubeUrlByKeywords(string keywords) {
|
public static async Task<string> FindYoutubeUrlByKeywords(string keywords)
|
||||||
|
{
|
||||||
if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey))
|
if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey))
|
||||||
throw new InvalidCredentialException("Google API Key is missing.");
|
throw new InvalidCredentialException("Google API Key is missing.");
|
||||||
if (string.IsNullOrWhiteSpace(keywords))
|
if (string.IsNullOrWhiteSpace(keywords))
|
||||||
@ -131,7 +147,8 @@ namespace NadekoBot.Classes {
|
|||||||
|
|
||||||
//maybe it is already a youtube url, in which case we will just extract the id and prepend it with youtube.com?v=
|
//maybe it is already a youtube url, in which case we will just extract the id and prepend it with youtube.com?v=
|
||||||
var match = new Regex("(?:youtu\\.be\\/|v=)(?<id>[\\da-zA-Z\\-_]*)").Match(keywords);
|
var match = new Regex("(?:youtu\\.be\\/|v=)(?<id>[\\da-zA-Z\\-_]*)").Match(keywords);
|
||||||
if (match.Length > 1) {
|
if (match.Length > 1)
|
||||||
|
{
|
||||||
return $"http://www.youtube.com?v={match.Groups["id"].Value}";
|
return $"http://www.youtube.com?v={match.Groups["id"].Value}";
|
||||||
}
|
}
|
||||||
var response =
|
var response =
|
||||||
@ -144,7 +161,8 @@ namespace NadekoBot.Classes {
|
|||||||
return "http://www.youtube.com/watch?v=" + obj.items[0].id.videoId.ToString();
|
return "http://www.youtube.com/watch?v=" + obj.items[0].id.videoId.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<string> GetPlaylistIdByKeyword(string query) {
|
public static async Task<string> GetPlaylistIdByKeyword(string query)
|
||||||
|
{
|
||||||
if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey))
|
if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey))
|
||||||
throw new ArgumentNullException(nameof(query));
|
throw new ArgumentNullException(nameof(query));
|
||||||
|
|
||||||
@ -159,8 +177,10 @@ namespace NadekoBot.Classes {
|
|||||||
return obj.items[0].id.playlistId.ToString();
|
return obj.items[0].id.playlistId.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<IEnumerable<string>> GetVideoIDs(string playlist, int number = 30) {
|
public static async Task<IEnumerable<string>> GetVideoIDs(string playlist, int number = 30)
|
||||||
if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey)) {
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey))
|
||||||
|
{
|
||||||
throw new ArgumentNullException(nameof(playlist));
|
throw new ArgumentNullException(nameof(playlist));
|
||||||
}
|
}
|
||||||
if (number < 1 || number > 100)
|
if (number < 1 || number > 100)
|
||||||
@ -178,7 +198,8 @@ namespace NadekoBot.Classes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static async Task<string> GetDanbooruImageLink(string tag) {
|
public static async Task<string> GetDanbooruImageLink(string tag)
|
||||||
|
{
|
||||||
var rng = new Random();
|
var rng = new Random();
|
||||||
|
|
||||||
if (tag == "loli") //loli doesn't work for some reason atm
|
if (tag == "loli") //loli doesn't work for some reason atm
|
||||||
@ -236,7 +257,8 @@ namespace NadekoBot.Classes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal static async Task<string> GetE621ImageLink(string tags) {
|
internal static async Task<string> GetE621ImageLink(string tags)
|
||||||
|
{
|
||||||
var rng = new Random();
|
var rng = new Random();
|
||||||
var url = $"https://e621.net/post/index/{rng.Next(0, 5)}/{Uri.EscapeUriString(tags)}";
|
var url = $"https://e621.net/post/index/{rng.Next(0, 5)}/{Uri.EscapeUriString(tags)}";
|
||||||
var webpage = await GetResponseStringAsync(url); // first extract the post id and go to that posts page
|
var webpage = await GetResponseStringAsync(url); // first extract the post id and go to that posts page
|
||||||
@ -244,16 +266,19 @@ namespace NadekoBot.Classes {
|
|||||||
return matches[rng.Next(0, matches.Count)].Groups["url"].Value;
|
return matches[rng.Next(0, matches.Count)].Groups["url"].Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<string> ShortenUrl(string url) {
|
public static async Task<string> ShortenUrl(string url)
|
||||||
|
{
|
||||||
if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey)) return url;
|
if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey)) return url;
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
var httpWebRequest =
|
var httpWebRequest =
|
||||||
(HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url?key=" +
|
(HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url?key=" +
|
||||||
NadekoBot.Creds.GoogleAPIKey);
|
NadekoBot.Creds.GoogleAPIKey);
|
||||||
httpWebRequest.ContentType = "application/json";
|
httpWebRequest.ContentType = "application/json";
|
||||||
httpWebRequest.Method = "POST";
|
httpWebRequest.Method = "POST";
|
||||||
|
|
||||||
using (var streamWriter = new StreamWriter(await httpWebRequest.GetRequestStreamAsync())) {
|
using (var streamWriter = new StreamWriter(await httpWebRequest.GetRequestStreamAsync()))
|
||||||
|
{
|
||||||
var json = "{\"longUrl\":\"" + url + "\"}";
|
var json = "{\"longUrl\":\"" + url + "\"}";
|
||||||
streamWriter.Write(json);
|
streamWriter.Write(json);
|
||||||
}
|
}
|
||||||
@ -262,11 +287,14 @@ namespace NadekoBot.Classes {
|
|||||||
if (httpResponse == null) return "HTTP_RESPONSE_ERROR";
|
if (httpResponse == null) return "HTTP_RESPONSE_ERROR";
|
||||||
var responseStream = httpResponse.GetResponseStream();
|
var responseStream = httpResponse.GetResponseStream();
|
||||||
if (responseStream == null) return "RESPONSE_STREAM ERROR";
|
if (responseStream == null) return "RESPONSE_STREAM ERROR";
|
||||||
using (var streamReader = new StreamReader(responseStream)) {
|
using (var streamReader = new StreamReader(responseStream))
|
||||||
|
{
|
||||||
var responseText = await streamReader.ReadToEndAsync();
|
var responseText = await streamReader.ReadToEndAsync();
|
||||||
return Regex.Match(responseText, @"""id"": ?""(?<id>.+)""").Groups["id"].Value;
|
return Regex.Match(responseText, @"""id"": ?""(?<id>.+)""").Groups["id"].Value;
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
Console.WriteLine(ex.ToString());
|
Console.WriteLine(ex.ToString());
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
@ -1,88 +1,107 @@
|
|||||||
using System;
|
using Discord.Commands;
|
||||||
using Discord.Modules;
|
using Discord.Modules;
|
||||||
using Discord.Commands;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using NadekoBot.Classes;
|
using NadekoBot.Classes;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace NadekoBot.Modules {
|
namespace NadekoBot.Modules
|
||||||
internal class NSFW : DiscordModule {
|
{
|
||||||
|
internal class NSFW : DiscordModule
|
||||||
|
{
|
||||||
|
|
||||||
private readonly Random rng = new Random();
|
private readonly Random rng = new Random();
|
||||||
|
|
||||||
public override string Prefix { get; } = NadekoBot.Config.CommandPrefixes.NSFW;
|
public override string Prefix { get; } = NadekoBot.Config.CommandPrefixes.NSFW;
|
||||||
|
|
||||||
public override void Install(ModuleManager manager) {
|
public override void Install(ModuleManager manager)
|
||||||
manager.CreateCommands("", cgb => {
|
{
|
||||||
|
manager.CreateCommands("", cgb =>
|
||||||
|
{
|
||||||
|
|
||||||
cgb.AddCheck(Classes.Permissions.PermissionChecker.Instance);
|
cgb.AddCheck(Classes.Permissions.PermissionChecker.Instance);
|
||||||
|
|
||||||
cgb.CreateCommand(Prefix + "hentai")
|
cgb.CreateCommand(Prefix + "hentai")
|
||||||
.Description("Shows a random NSFW hentai image from gelbooru and danbooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +)\n**Usage**: ~hentai yuri+kissing")
|
.Description("Shows a random NSFW hentai image from gelbooru and danbooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +)\n**Usage**: ~hentai yuri+kissing")
|
||||||
.Parameter("tag", ParameterType.Unparsed)
|
.Parameter("tag", ParameterType.Unparsed)
|
||||||
.Do(async e => {
|
.Do(async e =>
|
||||||
|
{
|
||||||
var tag = e.GetArg("tag")?.Trim() ?? "";
|
var tag = e.GetArg("tag")?.Trim() ?? "";
|
||||||
await e.Channel.SendMessage(":heart: Gelbooru: " + await SearchHelper.GetGelbooruImageLink("rating%3Aexplicit+"+tag));
|
await e.Channel.SendMessage(":heart: Gelbooru: " + await SearchHelper.GetGelbooruImageLink("rating%3Aexplicit+" + tag));
|
||||||
await e.Channel.SendMessage(":heart: Danbooru: " + await SearchHelper.GetDanbooruImageLink("rating%3Aexplicit+"+tag));
|
await e.Channel.SendMessage(":heart: Danbooru: " + await SearchHelper.GetDanbooruImageLink("rating%3Aexplicit+" + tag));
|
||||||
});
|
});
|
||||||
cgb.CreateCommand(Prefix + "danbooru")
|
cgb.CreateCommand(Prefix + "danbooru")
|
||||||
.Description("Shows a random hentai image from danbooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +)\n**Usage**: ~danbooru yuri+kissing")
|
.Description("Shows a random hentai image from danbooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +)\n**Usage**: ~danbooru yuri+kissing")
|
||||||
.Parameter("tag", ParameterType.Unparsed)
|
.Parameter("tag", ParameterType.Unparsed)
|
||||||
.Do(async e => {
|
.Do(async e =>
|
||||||
|
{
|
||||||
var tag = e.GetArg("tag")?.Trim() ?? "";
|
var tag = e.GetArg("tag")?.Trim() ?? "";
|
||||||
await e.Channel.SendMessage(await SearchHelper.GetDanbooruImageLink(tag));
|
await e.Channel.SendMessage(await SearchHelper.GetDanbooruImageLink(tag));
|
||||||
});
|
});
|
||||||
cgb.CreateCommand(Prefix + "gelbooru")
|
cgb.CreateCommand(Prefix + "gelbooru")
|
||||||
.Description("Shows a random hentai image from gelbooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +)\n**Usage**: ~gelbooru yuri+kissing")
|
.Description("Shows a random hentai image from gelbooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +)\n**Usage**: ~gelbooru yuri+kissing")
|
||||||
.Parameter("tag", ParameterType.Unparsed)
|
.Parameter("tag", ParameterType.Unparsed)
|
||||||
.Do(async e => {
|
.Do(async e =>
|
||||||
|
{
|
||||||
var tag = e.GetArg("tag")?.Trim() ?? "";
|
var tag = e.GetArg("tag")?.Trim() ?? "";
|
||||||
await e.Channel.SendMessage(await SearchHelper.GetGelbooruImageLink(tag));
|
await e.Channel.SendMessage(await SearchHelper.GetGelbooruImageLink(tag));
|
||||||
});
|
});
|
||||||
cgb.CreateCommand(Prefix + "safebooru")
|
cgb.CreateCommand(Prefix + "safebooru")
|
||||||
.Description("Shows a random image from safebooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +)\n**Usage**: ~gelbooru yuri+kissing")
|
.Description("Shows a random image from safebooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +)\n**Usage**: ~safebooru yuri+kissing")
|
||||||
.Parameter("tag", ParameterType.Unparsed)
|
.Parameter("tag", ParameterType.Unparsed)
|
||||||
.Do(async e => {
|
.Do(async e =>
|
||||||
|
{
|
||||||
var tag = e.GetArg("tag")?.Trim() ?? "";
|
var tag = e.GetArg("tag")?.Trim() ?? "";
|
||||||
await e.Channel.SendMessage(await SearchHelper.GetSafebooruImageLink(tag));
|
await e.Channel.SendMessage(await SearchHelper.GetSafebooruImageLink(tag));
|
||||||
});
|
});
|
||||||
cgb.CreateCommand(Prefix + "rule34")
|
cgb.CreateCommand(Prefix + "rule34")
|
||||||
.Description("Shows a random image from rule34.xx with a given tag. Tag is optional but preffered. (multiple tags are appended with +)\n**Usage**: ~gelbooru yuri+kissing")
|
.Description("Shows a random image from rule34.xx with a given tag. Tag is optional but preffered. (multiple tags are appended with +)\n**Usage**: ~gelbooru yuri+kissing")
|
||||||
.Parameter("tag", ParameterType.Unparsed)
|
.Parameter("tag", ParameterType.Unparsed)
|
||||||
.Do(async e => {
|
.Do(async e =>
|
||||||
|
{
|
||||||
var tag = e.GetArg("tag")?.Trim() ?? "";
|
var tag = e.GetArg("tag")?.Trim() ?? "";
|
||||||
await e.Channel.SendMessage(await SearchHelper.GetRule34ImageLink(tag));
|
await e.Channel.SendMessage(await SearchHelper.GetRule34ImageLink(tag));
|
||||||
});
|
});
|
||||||
cgb.CreateCommand(Prefix + "e621")
|
cgb.CreateCommand(Prefix + "e621")
|
||||||
.Description("Shows a random hentai image from e621.net with a given tag. Tag is optional but preffered. Use spaces for multiple tags.\n**Usage**: ~e621 yuri+kissing")
|
.Description("Shows a random hentai image from e621.net with a given tag. Tag is optional but preffered. Use spaces for multiple tags.\n**Usage**: ~e621 yuri+kissing")
|
||||||
.Parameter("tag", ParameterType.Unparsed)
|
.Parameter("tag", ParameterType.Unparsed)
|
||||||
.Do(async e => {
|
.Do(async e =>
|
||||||
|
{
|
||||||
var tag = e.GetArg("tag")?.Trim() ?? "";
|
var tag = e.GetArg("tag")?.Trim() ?? "";
|
||||||
await e.Channel.SendMessage(await SearchHelper.GetE621ImageLink(tag));
|
await e.Channel.SendMessage(await SearchHelper.GetE621ImageLink(tag));
|
||||||
});
|
});
|
||||||
cgb.CreateCommand(Prefix + "cp")
|
cgb.CreateCommand(Prefix + "cp")
|
||||||
.Description("We all know where this will lead you to.")
|
.Description("We all know where this will lead you to.")
|
||||||
.Parameter("anything", ParameterType.Unparsed)
|
.Parameter("anything", ParameterType.Unparsed)
|
||||||
.Do(async e => {
|
.Do(async e =>
|
||||||
|
{
|
||||||
await e.Channel.SendMessage("http://i.imgur.com/MZkY1md.jpg");
|
await e.Channel.SendMessage("http://i.imgur.com/MZkY1md.jpg");
|
||||||
});
|
});
|
||||||
cgb.CreateCommand(Prefix + "boobs")
|
cgb.CreateCommand(Prefix + "boobs")
|
||||||
.Description("Real adult content.")
|
.Description("Real adult content.")
|
||||||
.Do(async e => {
|
.Do(async e =>
|
||||||
try {
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
var obj = JArray.Parse(await SearchHelper.GetResponseStringAsync($"http://api.oboobs.ru/boobs/{rng.Next(0, 9380)}"))[0];
|
var obj = JArray.Parse(await SearchHelper.GetResponseStringAsync($"http://api.oboobs.ru/boobs/{rng.Next(0, 9380)}"))[0];
|
||||||
await e.Channel.SendMessage($"http://media.oboobs.ru/{ obj["preview"].ToString() }");
|
await e.Channel.SendMessage($"http://media.oboobs.ru/{ obj["preview"].ToString() }");
|
||||||
} catch (Exception ex) {
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
await e.Channel.SendMessage($"💢 {ex.Message}");
|
await e.Channel.SendMessage($"💢 {ex.Message}");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
cgb.CreateCommand(Prefix + "butts")
|
cgb.CreateCommand(Prefix + "butts")
|
||||||
.Alias(Prefix + "ass",Prefix + "butt")
|
.Alias(Prefix + "ass", Prefix + "butt")
|
||||||
.Description("Real adult content.")
|
.Description("Real adult content.")
|
||||||
.Do(async e => {
|
.Do(async e =>
|
||||||
try {
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
var obj = JArray.Parse(await SearchHelper.GetResponseStringAsync($"http://api.obutts.ru/butts/{rng.Next(0, 3373)}"))[0];
|
var obj = JArray.Parse(await SearchHelper.GetResponseStringAsync($"http://api.obutts.ru/butts/{rng.Next(0, 3373)}"))[0];
|
||||||
await e.Channel.SendMessage($"http://media.obutts.ru/{ obj["preview"].ToString() }");
|
await e.Channel.SendMessage($"http://media.obutts.ru/{ obj["preview"].ToString() }");
|
||||||
} catch (Exception ex) {
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
await e.Channel.SendMessage($"💢 {ex.Message}");
|
await e.Channel.SendMessage($"💢 {ex.Message}");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user