summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2025-07-06 19:23:32 +0500
committerilotterytea <iltsu@alright.party>2025-07-06 19:23:32 +0500
commit123d99d5db3ab2f3d26e70b9f7e90292f8099825 (patch)
treed8cdca2e43db1194cc94aeaa67754d4445bfd835
parent97174883ffcba3102b1150fc2b44995cb1f64a38 (diff)
feat: pfp command
-rw-r--r--luamods/profilepicture.lua115
1 files changed, 115 insertions, 0 deletions
diff --git a/luamods/profilepicture.lua b/luamods/profilepicture.lua
new file mode 100644
index 0000000..50df331
--- /dev/null
+++ b/luamods/profilepicture.lua
@@ -0,0 +1,115 @@
+local lines = {
+ english = {
+ ["no_message"] = "{sender.alias_name}: No username provided.",
+ ["not_found"] = "{sender.alias_name}: %s not found.",
+ ["external_api_error"] = "{sender.alias_name}: External API error. Try again later. (%s)",
+ ["success"] = "{sender.alias_name}: %s's profile picture: %s"
+ },
+ russian = {
+ ["no_message"] = "{sender.alias_name}: Имя пользователя должен быть предоставлен.",
+ ["not_found"] = "{sender.alias_name}: %s не найден.",
+ ["external_api_error"] = "{sender.alias_name}: Ошибка стороннего API. Попробуйте позже. (%s)",
+ ["success"] = "{sender.alias_name}: Аватарка пользователя %s: %s"
+ },
+}
+
+return {
+ name = "profilepicture",
+ description = [[
+Get user profile pictures.
+
+## Syntax
+
+`!pfp [users...]`
+
++ `[users...]` - User ID or user names. Separated by space.
+
+## Usage
+
++ `!pfp drdisrespect`
++ `!pfp 22484632`
++ `!pfp drdisrespect 22484632 okayeg`
+
+## Responses
+
++ `drdisrespect's profile picture: https://static-cdn.jtvnw.net/jtv_user_pictures/72a69c72-14b9-4be8-b8cb-802bc3e5f8ed-profile_image-600x600.png`
+
+## Important notes
+
++ User information is taken from the third-party API service ["ivr.fi"](https://api.ivr.fi/v2/docs)
+]],
+ delay_sec = 2,
+ options = {},
+ subcommands = {},
+ aliases = { "pfp", "avatar" },
+ minimal_rights = "user",
+ handle = function(request)
+ if request.message == nil then
+ return l10n_custom_formatted_line_request(request, lines, "no_message", {})
+ end
+
+ local parts = str_split(request.message, ' ')
+
+ local ids = {}
+ local logins = {}
+
+ for i = 1, #parts, 1 do
+ if #ids + #logins >= 3 then
+ break
+ end
+
+ local part = parts[i]
+ local id = tonumber(part)
+
+ if id == nil then
+ table.insert(logins, part)
+ else
+ table.insert(ids, id)
+ end
+ end
+
+ local query = ""
+
+ if #ids > 0 then
+ query = "id=" .. table.concat(ids, ',')
+ end
+
+ if #logins > 0 then
+ if #ids > 0 then
+ query = query .. "&"
+ end
+ query = query .. "login=" .. table.concat(logins, ',')
+ end
+
+ if #query == 0 then
+ return l10n_custom_formatted_line_request(request, lines, "no_message", {})
+ end
+
+ local response = net_get("https://api.ivr.fi/v2/twitch/user?" .. query)
+
+ if response.code == 404 then
+ return l10n_custom_formatted_line_request(request, lines, "not_found", { request.message })
+ end
+
+ if response.code ~= 200 then
+ return l10n_custom_formatted_line_request(request, lines, "external_api_error", { response.code })
+ end
+
+ local j = json_parse(response.text)
+
+ if #j == 0 then
+ return l10n_custom_formatted_line_request(request, lines, "not_found", { request.message })
+ end
+
+ local msgs = {}
+
+ for i = 1, #j, 1 do
+ local u = j[i]
+ local url = u.logo
+ local name = u.login
+ table.insert(msgs, l10n_custom_formatted_line_request(request, lines, "success", { name, url }))
+ end
+
+ return msgs
+ end
+}