This commit is contained in:
derpystuff 2022-05-24 21:22:47 +02:00
parent 726861294b
commit aec828beb5
14 changed files with 421 additions and 25 deletions

View file

@ -4,30 +4,41 @@ const attachmentTypes = Object.freeze({
image: ["image/png", "image/jpeg", "image/gif"]
})
async function getRecentMedia(context, limit){
async function getRecentMedia(context, limit) {
if (!context.message.channel) {
return undefined;
} else if (context.message.attachments.length > 0) {
return context.message.attachments.first();
}
const messages = await context.message.channel.fetchMessages({
limit
});
let messages = [];
// Handle Replies
if (context.message.messageReference) {
messages = [[context.message.messageReference.messageId, await context.message.channel.fetchMessage(context.message.messageReference.messageId)]] // somewhat hacky but it works lol
} else {
messages = await context.message.channel.fetchMessages({
limit: limit,
before: context.message.id
})
}
if (!messages) {
return undefined;
}
let attachments = [];
for(const m of messages){
for (const m of messages) {
let message = m[1]
if ( // First the attachment on the message
message.attachments.first()
) { attachments.push(message.attachments.first())
) {
attachments.push(message.attachments.first())
} else if ( // Then the embed image
message.embeds.length > 0 &&
message.embeds.toArray()[0].image
) { attachments.push(message.embeds.toArray()[0].image)
) {
attachments.push(message.embeds.toArray()[0].image)
} else if (
message.embeds.length > 0 &&
message.embeds.toArray()[0].thumbnail
@ -38,14 +49,14 @@ async function getRecentMedia(context, limit){
// simple helpers
async function getRecentImage(context, limit){
async function getRecentImage(context, limit) {
let attachments = await getRecentMedia(context, limit)
let at;
let validImages = attachmentTypes.image
for(const a of attachments){
if(a.contentType && validImages.includes(a.contentType) && at === undefined){ // discord attachment
for (const a of attachments) {
if (a.contentType && validImages.includes(a.contentType) && at === undefined) { // discord attachment
at = a.url
} else if (!a.content_type && at === undefined){ // other form of media
} else if (!a.content_type && at === undefined) { // other form of media
at = a.url
}
}

View file

@ -16,4 +16,8 @@ module.exports.codeblock = function(type, content){
module.exports.link = function(url, masked){
if(masked) return `[${masked}](${url})`
return url
}
module.exports.timestamp = function(time, flag = "t"){
return `<${flag}:${Math.floor(time/1000)}>`
}

View file

@ -1,28 +1,65 @@
async function getUser(context, query){
let user;
if(/[0-9]{18}/.test(query)){ // User ID supplied, use that
let member;
if(/[0-9]{18}/.test(query)){
let uid = query.match(/[0-9]{18}/)
try{
user = await context.client.rest.fetchUser(uid)
if(context.guild) member = await getMember(context, user.id)
} catch(e){
user = undefined
}
} else {
user = await getMember(context, query)
if(user) user = user.user
member = await getMember(context, query)
if(member) user = await context.client.rest.fetchUser(member.user.id)
}
return user;
return {user: user, member: member};
}
async function getMember(context, query){
if(!context.guild) return;
let members = await context.guild.fetchMembersSearch({ query })
console.log(members)
if(members) return members.first()
return;
if(/[0-9]{18}/.test(query)){
let uid = query.match(/[0-9]{18}/)
try{
member = await context.guild.fetchMember(uid)
return member;
} catch(e){
return;
}
} else {
let members = await context.guild.fetchMembersSearch({ query })
if(members) return members.first()
return;
}
}
const { Constants } = require('detritus-client')
const { UserFlags } = Constants
const BADGES = Object.freeze({
[UserFlags.STAFF]: '<:badge_staff:903276633161609246>',
[UserFlags.PARTNER]: '<:badge_partner:903276631559389196',
[UserFlags.DISCORD_CERTIFIED_MODERATOR]: '<:badge_mod:903276631198695467>',
[UserFlags.HYPESQUAD]: '<:badge_hypesquad:903276631408394351>',
[UserFlags.HYPESQUAD_ONLINE_HOUSE_1]: '<:badge_hypesquad_bravery:903276631790059540>',
[UserFlags.HYPESQUAD_ONLINE_HOUSE_2]: '<:badge_hypesquad_brilliance:903276631261597706>',
[UserFlags.HYPESQUAD_ONLINE_HOUSE_3]: '<:badge_hypesquad_balance:903276631211249674>',
[UserFlags.BUG_HUNTER_LEVEL_1]: '<:badge_bughunter:903276631173509131>',
[UserFlags.BUG_HUNTER_LEVEL_2]: '<:badge_bughunter_2:903276883523797033>',
[UserFlags.VERIFIED_DEVELOPER]: '<:badge_botdev:903276631173509130>',
[UserFlags.PREMIUM_EARLY_SUPPORTER]: '<:badge_earlysupporter:903277590956101672>'
})
function renderBadges(user){
let badges = [];
for(const flag of Object.keys(BADGES)){
if(user.hasFlag(parseInt(flag))) badges.push(BADGES[flag])
}
return badges;
}
module.exports = {
getUser,
getMember
getMember,
renderBadges
}