summaryrefslogtreecommitdiff
path: root/luamods/profilepicture.lua
blob: 50df331665ebc9731f417e2a0768b7bf39067683 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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
}