2022-11-23 15:30:59 +02:00
/ *
* Vencord , a modification for Discord ' s desktop app
* Copyright ( c ) 2022 Vendicated and contributors
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < https : //www.gnu.org/licenses/>.
* /
2022-11-28 13:37:55 +01:00
import { ApplicationCommandOptionType , sendBotMessage } from "@api/Commands" ;
import { ApplicationCommandInputType } from "@api/Commands/types" ;
2023-12-31 02:06:19 +02:00
import { definePluginSettings } from "@api/Settings" ;
2022-11-28 13:37:55 +01:00
import { Devs } from "@utils/constants" ;
2023-12-31 02:06:19 +02:00
import definePlugin , { OptionType } from "@utils/types" ;
const settings = definePluginSettings ( {
resultsAmount : {
type : OptionType . NUMBER ,
description : "The amount of results you want to get (more gives better results, but is slower)" ,
default : 10
}
} ) ;
2022-11-23 15:30:59 +02:00
export default definePlugin ( {
name : "UrbanDictionary" ,
2023-04-17 01:37:55 +02:00
description : "Search for a word on Urban Dictionary via /urban slash command" ,
2022-11-23 15:30:59 +02:00
authors : [ Devs . jewdev ] ,
dependencies : [ "CommandsAPI" ] ,
2023-12-31 02:06:19 +02:00
settings ,
2022-11-23 15:30:59 +02:00
commands : [
{
name : "urban" ,
description : "Returns the definition of a word from Urban Dictionary" ,
inputType : ApplicationCommandInputType.BUILT_IN ,
options : [
{
type : ApplicationCommandOptionType . STRING ,
name : "word" ,
description : "The word to search for on Urban Dictionary" ,
required : true
}
] ,
execute : async ( args , ctx ) = > {
try {
2023-12-31 02:06:19 +02:00
const query : string = encodeURIComponent ( args [ 0 ] . value ) ;
const { list } = await fetch ( ` https://api.urbandictionary.com/v0/define?term= ${ query } &per_page= ${ settings . store . resultsAmount } ` ) . then ( response = > response . json ( ) ) ;
2022-11-23 15:30:59 +02:00
2023-12-31 02:06:19 +02:00
if ( ! list . length )
2022-11-23 15:30:59 +02:00
return void sendBotMessage ( ctx . channel . id , { content : "No results found." } ) ;
2023-12-31 02:06:19 +02:00
const definition = list . reduce ( ( prev , curr ) = > {
return prev . thumbs_up > curr . thumbs_up ? prev : curr ;
} ) ;
2023-05-16 22:40:40 -04:00
const linkify = ( text : string ) = > text
. replaceAll ( "\r\n" , "\n" )
. replace ( / ( [ * > _ ` ~ \ \ ] ) / g s i , " \ \ $ 1 " )
. replace ( /\[(.+?)\]/g , ( _ , word ) = > ` [ ${ word } ](https://www.urbandictionary.com/define.php?term= ${ encodeURIComponent ( word ) } "Define ' ${ word } ' on Urban Dictionary") ` )
. trim ( ) ;
2022-11-23 15:30:59 +02:00
return void sendBotMessage ( ctx . channel . id , {
embeds : [
{
type : "rich" ,
author : {
2023-05-16 22:40:40 -04:00
name : ` Uploaded by " ${ definition . author } " ` ,
url : ` https://www.urbandictionary.com/author.php?author= ${ encodeURIComponent ( definition . author ) } ` ,
2022-11-23 15:30:59 +02:00
} ,
2023-05-16 22:40:40 -04:00
title : definition.word ,
url : ` https://www.urbandictionary.com/define.php?term= ${ encodeURIComponent ( definition . word ) } ` ,
2022-11-23 15:30:59 +02:00
description : linkify ( definition . definition ) ,
fields : [
{
name : "Example" ,
2023-05-16 22:40:40 -04:00
value : linkify ( definition . example ) ,
} ,
{
name : "Want more definitions?" ,
value : ` Check out [more definitions](https://www.urbandictionary.com/define.php?term= ${ query } "Define " ${ args [ 0 ] . value } " on Urban Dictionary") on Urban Dictionary. ` ,
} ,
2022-11-23 15:30:59 +02:00
] ,
color : 0xFF9900 ,
2023-05-16 22:40:40 -04:00
footer : { text : ` 👍 ${ definition . thumbs_up . toString ( ) } | 👎 ${ definition . thumbs_down . toString ( ) } ` , icon_url : "https://www.urbandictionary.com/favicon.ico" } ,
timestamp : new Date ( definition . written_on ) . toISOString ( ) ,
} ,
] as any ,
2022-11-23 15:30:59 +02:00
} ) ;
} catch ( error ) {
2023-05-16 22:40:40 -04:00
sendBotMessage ( ctx . channel . id , {
content : ` Something went wrong: \` ${ error } \` ` ,
2022-11-23 15:30:59 +02:00
} ) ;
}
}
}
]
} ) ;