This repository has been archived on 2021-04-24. You can view files and clone it, but cannot push or open issues or pull requests.
Mikubot-2/miku/plugins/myanimelist.lua

234 lines
6.2 KiB
Lua
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local mal = {}
local xml = require("xml")
mal.command = 'anime <Anime>, /manga <Manga>'
function mal:init(config)
if not cred_data.mal_username then
print('Fehlender Key: mal_username.')
print('myanimelist.lua wird nicht aktiviert.')
return
elseif not cred_data.mal_pw then
print('Fehlender Key: mal_pw.')
print('myanimelist.lua wird nicht aktiviert.')
return
end
mal.triggers = {
"^/(anime) (.+)$",
"^/(mal) (.+)$",
"^/(manga) (.+)$"
}
mal.doc = [[*
]]..config.cmd_pat..[[anime*_ <Anime>_: Sendet Infos zum Anime
*]]..config.cmd_pat..[[manga*_ <Manga>_: Sendet Infos zum Manga
]]
end
local user = cred_data.mal_username
local password = cred_data.mal_pw
local BASE_URL = 'https://'..user..':'..password..'@myanimelist.net/api'
function mal:delete_tags(str)
str = string.gsub( str, '<br />', '')
str = string.gsub( str, '%[i%]', '')
str = string.gsub( str, '%[/i%]', '')
str = string.gsub( str, '&mdash;', '')
return str
end
local makeOurDate = function(dateString)
local pattern = "(%d+)%-(%d+)%-(%d+)"
local year, month, day = dateString:match(pattern)
if month == "00" then
return year
elseif day == "00" then
return month..'.'..year
else
return day..'.'..month..'.'..year
end
end
function mal:get_mal_info(query, typ)
if typ == 'anime' then
url = BASE_URL..'/anime/search.xml?q='..query
elseif typ == 'manga' then
url = BASE_URL..'/manga/search.xml?q='..query
end
local res,code = https.request(url)
if code ~= 200 then return "HTTP-Fehler" end
local result = xml.load(res)
return result
end
function mal:send_anime_data(result, receiver)
local title = '<b>'..xml.find(result, 'title')[1]..'</b>'
local id = xml.find(result, 'id')[1]
local mal_url = 'https://myanimelist.net/anime/'..id
if xml.find(result, 'type')[1] then
typ = ' ('..xml.find(result, 'type')[1]..')'
else
typ = ''
end
if xml.find(result, 'english')[1] then
eng = '\n<b>Englisch:</b> '..xml.find(result, 'english')[1]
else
eng = ''
end
if xml.find(result, 'synonyms')[1] then
syno = '\n<b>Alternativ:</b> '..xml.find(result, 'synonyms')[1]
else
syno = ''
end
if xml.find(result, 'episodes')[1] then
episodes = '\n<b>Episoden:</b> '..xml.find(result, 'episodes')[1]
else
episodes = ''
end
if xml.find(result, 'status')[1] then
status = ' ('..xml.find(result, 'status')[1]..')'
else
status = ''
end
if xml.find(result, 'score')[1] ~= "0.00" then
score = '\n<b>Score:</b> '..string.gsub(xml.find(result, 'score')[1], "%.", ",")
else
score = ''
end
if xml.find(result, 'start_date')[1] ~= "0000-00-00" then
startdate = '\n<b>Ausstrahlung:</b> '..makeOurDate(xml.find(result, 'start_date')[1])
else
startdate = ''
end
if xml.find(result, 'end_date')[1] ~= "0000-00-00" then
enddate = ' - '..makeOurDate(xml.find(result, 'end_date')[1])
else
enddate = ''
end
if xml.find(result, 'synopsis')[1] then
desc = '\n<i>'..unescape(mal:delete_tags(string.sub(xml.find(result, 'synopsis')[1], 1, 250)))..'...</i>'
else
desc = ''
end
if xml.find(result, 'image') then
image_url = xml.find(result, 'image')[1]
else
image_url = ''
end
local text = title..typ..eng..syno..episodes..status..score..startdate..enddate..'\n'..desc..'<a href="'..image_url..'"> </a>\n<a href="'..mal_url..'">Auf MyAnimeList ansehen</a>'
return text
end
function mal:send_manga_data(result)
local title = xml.find(result, 'title')[1]
local id = xml.find(result, 'id')[1]
local mal_url = 'https://myanimelist.net/manga/'..id
if xml.find(result, 'type')[1] then
typ = ' ('..xml.find(result, 'type')[1]..')'
else
typ = ''
end
if xml.find(result, 'synonyms')[1] then
alt_name = '\noder: '..unescape(mal:delete_tags(xml.find(result, 'synonyms')[1]))
else
alt_name = ''
end
if xml.find(result, 'chapters')[1] then
chapters = '\n<b>Kapitel:</b> '..xml.find(result, 'chapters')[1]
else
chapters = ''
end
if xml.find(result, 'status')[1] then
status = ' ('..xml.find(result, 'status')[1]..')'
else
status = ''
end
if xml.find(result, 'volumes')[1] then
volumes = '\n<b>Bände:</b> '..xml.find(result, 'volumes')[1]
else
volumes = ''
end
if xml.find(result, 'score')[1] ~= "0.00" then
score = '\n<b>Score:</b> '..xml.find(result, 'score')[1]
else
score = ''
end
if xml.find(result, 'start_date')[1] ~= "0000-00-00" then
startdate = '\n<b>Veröffentlichungszeitraum:</b> '..makeOurDate(xml.find(result, 'start_date')[1])
else
startdate = ''
end
if xml.find(result, 'end_date')[1] ~= "0000-00-00" then
enddate = ' - '..makeOurDate(xml.find(result, 'end_date')[1])
else
enddate = ''
end
if xml.find(result, 'synopsis')[1] then
desc = '\n<i>'..unescape(mal:delete_tags(string.sub(xml.find(result, 'synopsis')[1], 1, 200)))..'...</i>'
else
desc = ''
end
if xml.find(result, 'image') then
image_url = xml.find(result, 'image')[1]
else
image_url = ''
end
local text = title..alt_name..typ..chapters..status..volumes..score..startdate..enddate..desc..'<a href="'..image_url..'"> </a>\n<a href="'..mal_url..'">Auf MyAnimeList ansehen</a>'
return text
end
function mal:action(msg, config, matches)
local query = URL.escape(matches[2])
if matches[1] == 'anime' or matches[1] == 'mal' then
local anime_info = mal:get_mal_info(query, 'anime')
if anime_info == "HTTP-Fehler" then
utilities.send_reply(msg, 'Anime nicht gefunden!')
return
else
local text = mal:send_anime_data(anime_info)
utilities.send_message(msg.chat.id, text, false, msg.message_id, 'html')
return
end
elseif matches[1] == 'manga' then
local manga_info = mal:get_mal_info(query, 'manga')
if manga_info == "HTTP-Fehler" then
utilities.send_reply(msg, 'Manga nicht gefunden!')
return
else
local text = mal:send_manga_data(manga_info)
utilities.send_message(msg.chat.id, text, false, msg.message_id, 'html')
return
end
end
end
return mal