Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F621188
reddit.lua
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
3 KB
Referenced Files
None
Subscribers
None
reddit.lua
View Options
--[[
Based on a plugin by topkecleon. Licensed under GNU AGPLv3
https://github.com/topkecleon/otouto/blob/master/LICENSE.
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local
reddit
=
{}
local
mattata
=
require
(
'mattata'
)
local
https
=
require
(
'ssl.https'
)
local
json
=
require
(
'dkjson'
)
function
reddit
:
init
()
reddit
.
commands
=
mattata
.
commands
(
self
.
info
.
username
,
{
'^/r/'
}):
command
(
'r/'
):
command
(
'reddit'
).
table
reddit
.
help
=
'/r/subreddit - Returns the latest posts from the given subreddit.'
end
function
reddit
.
format_results
(
posts
,
limit
)
local
output
=
{}
if
#
posts
==
0
then
return
false
end
local
count
=
0
for
_
,
v
in
pairs
(
posts
)
do
count
=
count
+
1
if
count
>
limit
then
break
end
local
post
=
v
.
data
local
title
=
post
.
title
if
title
:
len
()
>
250
then
title
=
mattata
.
trim
(
title
:
sub
(
1
,
250
))
..
'...'
end
local
short_url
=
'redd.it/'
..
post
.
id
local
result
=
'<a href="'
..
mattata
.
escape_html
(
short_url
)
..
'">'
..
mattata
.
escape_html
(
title
)
..
'</a>'
if
post
.
domain
and
not
post
.
is_self
then
post
.
url
=
mattata
.
escape_html
(
post
.
url
)
post
.
domain
=
mattata
.
escape_html
(
post
.
domain
)
result
=
mattata
.
symbols
.
bullet
..
' <code>[</code><a href="'
..
post
.
url
..
'">'
..
post
.
domain
..
'</a><code>]</code> '
..
result
else
result
=
mattata
.
symbols
.
bullet
..
' '
..
result
end
table.insert
(
output
,
result
)
end
return
table.concat
(
output
,
'
\n
'
)
end
function
reddit
.
on_message
(
_
,
message
,
configuration
,
language
)
local
limit
=
message
.
chat
.
type
~=
'private'
and
configuration
.
limits
.
reddit
.
public
or
configuration
.
limits
.
reddit
.
private
local
input
=
mattata
.
input
(
message
.
text
)
local
subreddit
=
message
.
text
:
match
(
'^/r/([%w][%w_]+)%s?'
)
if
input
and
not
subreddit
then
subreddit
=
input
elseif
not
input
and
not
subreddit
then
return
mattata
.
send_reply
(
message
,
reddit
.
help
)
end
if
not
subreddit
or
subreddit
:
len
()
>
21
or
subreddit
:
len
()
<
2
then
return
mattata
.
send_reply
(
message
,
'That
\'
s not a valid subreddit!'
)
end
local
request_url
=
'https://www.reddit.com/.json?limit='
..
limit
local
old_timeout
=
https
.
TIMEOUT
https
.
TIMEOUT
=
1
if
subreddit
==
'random'
or
subreddit
==
'randnsfw'
then
if
message
.
chat
.
type
~=
'private'
and
subreddit
==
'randnsfw'
then
subreddit
=
'random'
end
local
_
,
_
,
headers
=
https
.
request
({
[
'url'
]
=
'https://www.reddit.com/r/'
..
subreddit
..
'.json?limit=1'
,
[
'redirect'
]
=
false
})
subreddit
=
headers
.
location
and
headers
.
location
:
match
(
'r/(.-)/%.json'
)
or
'all'
end
if
subreddit
~=
'all'
then
request_url
=
'https://www.reddit.com/r/'
..
subreddit
..
'/.json?limit='
..
limit
end
local
output
=
'<b>/r/'
..
subreddit
..
'</b>
\n
'
local
jstr
,
res
=
https
.
request
(
request_url
)
https
.
TIMEOUT
=
old_timeout
if
res
==
404
or
res
==
'wantread'
then
return
mattata
.
send_reply
(
message
,
language
[
'errors'
][
'results'
])
elseif
res
~=
200
then
return
mattata
.
send_reply
(
message
,
language
[
'errors'
][
'connection'
])
end
local
jdat
=
json
.
decode
(
jstr
)
if
not
jdat
or
not
jdat
.
data
or
#
jdat
.
data
.
children
<
1
then
return
mattata
.
send_reply
(
message
,
language
[
'errors'
][
'results'
])
end
output
=
output
..
reddit
.
format_results
(
jdat
.
data
.
children
,
limit
)
return
mattata
.
send_message
(
message
.
chat
.
id
,
output
,
'html'
,
true
)
end
return
reddit
File Metadata
Details
Attached
Mime Type
text/html
Expires
Sat, Nov 14, 6:51 PM (18 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
118782
Default Alt Text
reddit.lua (3 KB)
Attached To
Mode
R69 mattata
Attached
Detach File
Event Timeline