2022-11-23 13:30:59 +00: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 12:37:55 +00:00
import { ApplicationCommandOptionType , sendBotMessage } from "@api/Commands" ;
import { ApplicationCommandInputType } from "@api/Commands/types" ;
import { Devs } from "@utils/constants" ;
import definePlugin from "@utils/types" ;
2022-11-23 13:30:59 +00:00
export default definePlugin ( {
name : "UrbanDictionary" ,
2023-04-16 23:37:55 +00:00
description : "Search for a word on Urban Dictionary via /urban slash command" ,
2022-11-23 13:30:59 +00:00
authors : [ Devs . jewdev ] ,
dependencies : [ "CommandsAPI" ] ,
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-05-17 02:40:40 +00:00
const query = encodeURIComponent ( args [ 0 ] . value ) ;
const { list : [ definition ] } = await ( await fetch ( ` https://api.urbandictionary.com/v0/define?term= ${ query } ` ) ) . json ( ) ;
2022-11-23 13:30:59 +00:00
if ( ! definition )
return void sendBotMessage ( ctx . channel . id , { content : "No results found." } ) ;
2023-05-17 02:40:40 +00: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 13:30:59 +00:00
return void sendBotMessage ( ctx . channel . id , {
embeds : [
{
type : "rich" ,
author : {
2023-05-17 02:40:40 +00:00
name : ` Uploaded by " ${ definition . author } " ` ,
url : ` https://www.urbandictionary.com/author.php?author= ${ encodeURIComponent ( definition . author ) } ` ,
2022-11-23 13:30:59 +00:00
} ,
2023-05-17 02:40:40 +00:00
title : definition.word ,
url : ` https://www.urbandictionary.com/define.php?term= ${ encodeURIComponent ( definition . word ) } ` ,
2022-11-23 13:30:59 +00:00
description : linkify ( definition . definition ) ,
fields : [
{
name : "Example" ,
2023-05-17 02:40:40 +00: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 13:30:59 +00:00
] ,
color : 0xFF9900 ,
2023-05-17 02:40:40 +00: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 13:30:59 +00:00
} ) ;
} catch ( error ) {
2023-05-17 02:40:40 +00:00
sendBotMessage ( ctx . channel . id , {
content : ` Something went wrong: \` ${ error } \` ` ,
2022-11-23 13:30:59 +00:00
} ) ;
}
}
}
]
} ) ;