2016-08-15 14:57:40 +00:00
|
|
|
|
using Discord;
|
|
|
|
|
using Discord.Commands;
|
|
|
|
|
using NadekoBot.Attributes;
|
|
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using NadekoBot.Services;
|
|
|
|
|
using System.Net.Http;
|
|
|
|
|
using System.Text.RegularExpressions;
|
2016-08-15 16:46:40 +00:00
|
|
|
|
using System.Xml.Linq;
|
2016-08-18 21:00:54 +00:00
|
|
|
|
using System.Net;
|
2016-08-20 20:35:27 +00:00
|
|
|
|
using Discord.WebSocket;
|
2016-08-21 16:00:03 +00:00
|
|
|
|
using NadekoBot.Extensions;
|
2016-08-15 14:57:40 +00:00
|
|
|
|
|
|
|
|
|
namespace NadekoBot.Modules.NSFW
|
|
|
|
|
{
|
|
|
|
|
[Module("~", AppendSpace = false)]
|
2016-08-18 21:00:54 +00:00
|
|
|
|
public class NSFW : DiscordModule
|
2016-08-15 14:57:40 +00:00
|
|
|
|
{
|
2016-08-28 00:46:36 +00:00
|
|
|
|
public NSFW(ILocalization loc, CommandService cmds, DiscordSocketClient client) : base(loc, cmds, client)
|
2016-08-15 14:57:40 +00:00
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2016-09-03 22:23:29 +00:00
|
|
|
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
2016-08-15 14:57:40 +00:00
|
|
|
|
[RequireContext(ContextType.Guild)]
|
2016-08-28 02:33:09 +00:00
|
|
|
|
public async Task Hentai(IUserMessage umsg, [Remainder] string tag = null)
|
2016-08-15 14:57:40 +00:00
|
|
|
|
{
|
2016-08-28 02:33:09 +00:00
|
|
|
|
var channel = (ITextChannel)umsg.Channel;
|
2016-08-15 14:57:40 +00:00
|
|
|
|
|
|
|
|
|
tag = tag?.Trim() ?? "";
|
|
|
|
|
|
|
|
|
|
var links = await Task.WhenAll(GetGelbooruImageLink("rating%3Aexplicit+" + tag), GetDanbooruImageLink("rating%3Aexplicit+" + tag)).ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
|
if (links.All(l => l == null))
|
|
|
|
|
{
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync("`No results.`");
|
2016-08-15 14:57:40 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync(String.Join("\n\n", links)).ConfigureAwait(false);
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-09-03 22:23:29 +00:00
|
|
|
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
2016-08-15 14:57:40 +00:00
|
|
|
|
[RequireContext(ContextType.Guild)]
|
2016-08-28 02:33:09 +00:00
|
|
|
|
public async Task Danbooru(IUserMessage umsg, [Remainder] string tag = null)
|
2016-08-15 14:57:40 +00:00
|
|
|
|
{
|
2016-08-28 02:33:09 +00:00
|
|
|
|
var channel = (ITextChannel)umsg.Channel;
|
2016-08-15 14:57:40 +00:00
|
|
|
|
|
|
|
|
|
tag = tag?.Trim() ?? "";
|
|
|
|
|
var link = await GetDanbooruImageLink(tag).ConfigureAwait(false);
|
|
|
|
|
if (string.IsNullOrWhiteSpace(link))
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync("Search yielded no results ;(");
|
2016-08-15 14:57:40 +00:00
|
|
|
|
else
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync(link).ConfigureAwait(false);
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-09-03 22:23:29 +00:00
|
|
|
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
2016-08-15 14:57:40 +00:00
|
|
|
|
[RequireContext(ContextType.Guild)]
|
2016-08-28 02:33:09 +00:00
|
|
|
|
public async Task Gelbooru(IUserMessage umsg, [Remainder] string tag = null)
|
2016-08-15 14:57:40 +00:00
|
|
|
|
{
|
2016-08-28 02:33:09 +00:00
|
|
|
|
var channel = (ITextChannel)umsg.Channel;
|
2016-08-15 14:57:40 +00:00
|
|
|
|
|
|
|
|
|
tag = tag?.Trim() ?? "";
|
|
|
|
|
var link = await GetRule34ImageLink(tag).ConfigureAwait(false);
|
|
|
|
|
if (string.IsNullOrWhiteSpace(link))
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync("Search yielded no results ;(");
|
2016-08-15 14:57:40 +00:00
|
|
|
|
else
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync(link).ConfigureAwait(false);
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-09-03 22:23:29 +00:00
|
|
|
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
2016-08-15 14:57:40 +00:00
|
|
|
|
[RequireContext(ContextType.Guild)]
|
2016-08-28 02:33:09 +00:00
|
|
|
|
public async Task Rule34(IUserMessage umsg, [Remainder] string tag = null)
|
2016-08-15 14:57:40 +00:00
|
|
|
|
{
|
2016-08-28 02:33:09 +00:00
|
|
|
|
var channel = (ITextChannel)umsg.Channel;
|
2016-08-15 14:57:40 +00:00
|
|
|
|
|
|
|
|
|
tag = tag?.Trim() ?? "";
|
|
|
|
|
var link = await GetGelbooruImageLink(tag).ConfigureAwait(false);
|
|
|
|
|
if (string.IsNullOrWhiteSpace(link))
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync("Search yielded no results ;(");
|
2016-08-15 14:57:40 +00:00
|
|
|
|
else
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync(link).ConfigureAwait(false);
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-09-03 22:23:29 +00:00
|
|
|
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
2016-08-15 14:57:40 +00:00
|
|
|
|
[RequireContext(ContextType.Guild)]
|
2016-08-28 02:33:09 +00:00
|
|
|
|
public async Task E621(IUserMessage umsg, [Remainder] string tag = null)
|
2016-08-15 14:57:40 +00:00
|
|
|
|
{
|
2016-08-28 02:33:09 +00:00
|
|
|
|
var channel = (ITextChannel)umsg.Channel;
|
2016-08-15 14:57:40 +00:00
|
|
|
|
|
|
|
|
|
tag = tag?.Trim() ?? "";
|
|
|
|
|
var link = await GetE621ImageLink(tag).ConfigureAwait(false);
|
|
|
|
|
if (string.IsNullOrWhiteSpace(link))
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync("Search yielded no results ;(");
|
2016-08-15 14:57:40 +00:00
|
|
|
|
else
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync(link).ConfigureAwait(false);
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-09-03 22:23:29 +00:00
|
|
|
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
2016-08-15 14:57:40 +00:00
|
|
|
|
[RequireContext(ContextType.Guild)]
|
2016-08-28 02:33:09 +00:00
|
|
|
|
public async Task Cp(IUserMessage umsg)
|
2016-08-15 14:57:40 +00:00
|
|
|
|
{
|
2016-08-28 02:33:09 +00:00
|
|
|
|
var channel = (ITextChannel)umsg.Channel;
|
2016-08-15 14:57:40 +00:00
|
|
|
|
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync("http://i.imgur.com/MZkY1md.jpg").ConfigureAwait(false);
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2016-09-03 22:23:29 +00:00
|
|
|
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
2016-08-15 14:57:40 +00:00
|
|
|
|
[RequireContext(ContextType.Guild)]
|
2016-08-28 02:33:09 +00:00
|
|
|
|
public async Task Boobs(IUserMessage umsg)
|
2016-08-15 14:57:40 +00:00
|
|
|
|
{
|
2016-08-28 02:33:09 +00:00
|
|
|
|
var channel = (ITextChannel)umsg.Channel;
|
2016-08-15 14:57:40 +00:00
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
JToken obj;
|
|
|
|
|
using (var http = new HttpClient())
|
|
|
|
|
{
|
2016-08-16 14:53:38 +00:00
|
|
|
|
obj = JArray.Parse(await http.GetStringAsync($"http://api.oboobs.ru/boobs/{ new Random().Next(0, 9880) }").ConfigureAwait(false))[0];
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync($"http://media.oboobs.ru/{ obj["preview"].ToString() }").ConfigureAwait(false);
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync($"💢 {ex.Message}").ConfigureAwait(false);
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2016-09-03 22:23:29 +00:00
|
|
|
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
2016-08-15 14:57:40 +00:00
|
|
|
|
[RequireContext(ContextType.Guild)]
|
2016-08-28 02:33:09 +00:00
|
|
|
|
public async Task Butts(IUserMessage umsg)
|
2016-08-15 14:57:40 +00:00
|
|
|
|
{
|
2016-08-28 02:33:09 +00:00
|
|
|
|
var channel = (ITextChannel)umsg.Channel;
|
2016-08-15 14:57:40 +00:00
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
JToken obj;
|
|
|
|
|
using (var http = new HttpClient())
|
|
|
|
|
{
|
2016-08-16 14:53:38 +00:00
|
|
|
|
obj = JArray.Parse(await http.GetStringAsync($"http://api.obutts.ru/butts/{ new Random().Next(0, 3873) }").ConfigureAwait(false))[0];
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync($"http://media.obutts.ru/{ obj["preview"].ToString() }").ConfigureAwait(false);
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
2016-08-20 14:33:18 +00:00
|
|
|
|
await channel.SendMessageAsync($"💢 {ex.Message}").ConfigureAwait(false);
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static async Task<string> GetDanbooruImageLink(string tag)
|
|
|
|
|
{
|
|
|
|
|
var rng = new Random();
|
|
|
|
|
|
|
|
|
|
if (tag == "loli") //loli doesn't work for some reason atm
|
|
|
|
|
tag = "flat_chest";
|
|
|
|
|
|
|
|
|
|
var link = $"http://danbooru.donmai.us/posts?" +
|
|
|
|
|
$"page={rng.Next(0, 15)}";
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(tag))
|
|
|
|
|
link += $"&tags={tag.Replace(" ", "_")}";
|
|
|
|
|
using (var http = new HttpClient())
|
|
|
|
|
{
|
|
|
|
|
var webpage = await http.GetStringAsync(link).ConfigureAwait(false);
|
|
|
|
|
var matches = Regex.Matches(webpage, "data-large-file-url=\"(?<id>.*?)\"");
|
|
|
|
|
|
|
|
|
|
if (matches.Count == 0)
|
|
|
|
|
return null;
|
|
|
|
|
return $"http://danbooru.donmai.us" +
|
|
|
|
|
$"{matches[rng.Next(0, matches.Count)].Groups["id"].Value}";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static async Task<string> GetGelbooruImageLink(string tag)
|
|
|
|
|
{
|
2016-08-15 16:46:40 +00:00
|
|
|
|
using (var http = new HttpClient())
|
|
|
|
|
{
|
2016-08-21 16:00:03 +00:00
|
|
|
|
http.AddFakeHeaders();
|
2016-08-15 16:46:40 +00:00
|
|
|
|
|
|
|
|
|
var webpage = await http.GetStringAsync("http://gelbooru.com/index.php?page=dapi&s=post&q=index&limit=100&tags="+ tag.Replace(" ", "_")).ConfigureAwait(false);
|
|
|
|
|
var matches = Regex.Matches(webpage, "file_url=\"(?<url>.*?)\"");
|
|
|
|
|
if (matches.Count == 0)
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
var rng = new Random();
|
|
|
|
|
var match = matches[rng.Next(0, matches.Count)];
|
|
|
|
|
return matches[rng.Next(0, matches.Count)].Groups["url"].Value;
|
|
|
|
|
}
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static async Task<string> GetRule34ImageLink(string tag)
|
|
|
|
|
{
|
|
|
|
|
var rng = new Random();
|
|
|
|
|
var url =
|
|
|
|
|
$"http://rule34.xxx/index.php?page=dapi&s=post&q=index&limit=100&tags={tag.Replace(" ", "_")}";
|
2016-08-15 16:46:40 +00:00
|
|
|
|
using (var http = new HttpClient())
|
|
|
|
|
{
|
|
|
|
|
var webpage = await http.GetStringAsync(url).ConfigureAwait(false);
|
|
|
|
|
var matches = Regex.Matches(webpage, "file_url=\"(?<url>.*?)\"");
|
|
|
|
|
if (matches.Count == 0)
|
|
|
|
|
return null;
|
|
|
|
|
var match = matches[rng.Next(0, matches.Count)];
|
|
|
|
|
return "http:" + matches[rng.Next(0, matches.Count)].Groups["url"].Value;
|
|
|
|
|
}
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2016-09-01 01:12:08 +00:00
|
|
|
|
public static async Task<string> GetE621ImageLink(string tags)
|
2016-08-15 14:57:40 +00:00
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
2016-08-15 16:46:40 +00:00
|
|
|
|
using (var http = new HttpClient())
|
|
|
|
|
{
|
2016-08-21 16:00:03 +00:00
|
|
|
|
http.AddFakeHeaders();
|
2016-08-18 21:00:54 +00:00
|
|
|
|
var data = await http.GetStreamAsync("http://e621.net/post/index.xml?tags=" + Uri.EscapeUriString(tags) + "%20order:random&limit=1");
|
2016-08-15 16:46:40 +00:00
|
|
|
|
var doc = XDocument.Load(data);
|
|
|
|
|
return doc.Descendants("file_url").FirstOrDefault().Value;
|
|
|
|
|
}
|
2016-08-15 14:57:40 +00:00
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Error in e621 search: \n" + ex);
|
|
|
|
|
return "Error, do you have too many tags?";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|