add NSFW module
parent
6a0d9aa9b0
commit
d1e1ecdb19
|
@ -0,0 +1,81 @@
|
|||
require 'json'
|
||||
require 'net/http'
|
||||
require 'uri'
|
||||
|
||||
class Mod_NSFW < Vrobot4::Module::Module
|
||||
def self.type() "NSFW" end
|
||||
Vrobot4::Module.add_module_type self, server: "Discord"
|
||||
|
||||
def initialize info
|
||||
super
|
||||
register :c_danbooru, "danbooru", "Queries Danbooru for a random image."
|
||||
register :c_saucenao, "saucenao", "Queries SauceNao for an image."
|
||||
@disallowed = info[:danbooru_filters]
|
||||
@danbooru_login = info[:danbooru_login]
|
||||
@danbooru_api_key = info[:danbooru_api_key]
|
||||
@saucenao_api_key = info[:saucenao_api_key]
|
||||
end
|
||||
|
||||
def c_danbooru m, argv
|
||||
# due to Danbooru not allowing blacklists in API searches, we have to make
|
||||
# do with our own auto-immune system against Bad Tags
|
||||
disallow_regex = /\b(#{@disallowed.join("|")})\b/
|
||||
if md = argv.match(disallow_regex)
|
||||
raise ArgumentError, "The tag #{md[1]} is disallowed."
|
||||
end
|
||||
parm = {
|
||||
random: true,
|
||||
limit: 50,
|
||||
login: @danbooru_login,
|
||||
api_key: @danbooru_api_key,
|
||||
}
|
||||
parm[:tags] = argv unless argv.empty?
|
||||
uri = URI("https://danbooru.donmai.us/posts.json")
|
||||
uri.query = URI.encode_www_form parm
|
||||
|
||||
res = Net::HTTP.get_response(uri)
|
||||
if res.is_a? Net::HTTPSuccess
|
||||
json = JSON.parse(res.body).shuffle
|
||||
for obj in json
|
||||
tags = obj["tag_string"]
|
||||
url = obj["file_url"]
|
||||
src = obj["source"]
|
||||
src = "none provided" if src.empty?
|
||||
if !tags.match(disallow_regex) && url && !url.empty?
|
||||
m.reply "#{url}\n(source: <#{src}>)"
|
||||
return
|
||||
end
|
||||
end
|
||||
raise ArgumentError, "The query failed due to a tagging error."
|
||||
else
|
||||
m.reply "Couldn't process request. Error code: #{res}"
|
||||
end
|
||||
end
|
||||
|
||||
def c_saucenao m, argv
|
||||
parm = {
|
||||
output_type: 2,
|
||||
numres: 1,
|
||||
api_key: @saucenao_api_key,
|
||||
url: argv,
|
||||
}
|
||||
uri = URI("https://saucenao.com/search.php")
|
||||
uri.query = URI.encode_www_form parm
|
||||
res = Net::HTTP.get_response(uri)
|
||||
if res.is_a? Net::HTTPSuccess
|
||||
json = JSON.parse res.body
|
||||
if results = json["results"] and
|
||||
results = results[0] and
|
||||
results = results["data"] and
|
||||
results = results["ext_urls"]
|
||||
m.reply "Results found: <#{results.join(">\n<")}>"
|
||||
else
|
||||
raise ArgumentError, "The query failed."
|
||||
end
|
||||
else
|
||||
raise ArgumentError, "Couldn't process request. Error code: #{res}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
## EOF
|
Loading…
Reference in New Issue