update webview to support dms
This commit is contained in:
		
							parent
							
								
									96cffd9c4c
								
							
						
					
					
						commit
						44a1200084
					
				| 
						 | 
					@ -80,7 +80,7 @@ const start = () => {
 | 
				
			||||||
      const query = new Map<string, string>();
 | 
					      const query = new Map<string, string>();
 | 
				
			||||||
      if (tempQ !== undefined) {
 | 
					      if (tempQ !== undefined) {
 | 
				
			||||||
        tempQ.split('&').forEach((e: string) => {
 | 
					        tempQ.split('&').forEach((e: string) => {
 | 
				
			||||||
          log(LT.LOG, `Parsing request query ${request} ${e}`);
 | 
					          log(LT.LOG, `Parsing request query ${JSON.stringify(request)} ${e}`);
 | 
				
			||||||
          const [option, params] = e.split('=');
 | 
					          const [option, params] = e.split('=');
 | 
				
			||||||
          query.set(option.toLowerCase(), params);
 | 
					          query.set(option.toLowerCase(), params);
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
import { DiscordenoMember, getChannel, getMember, getMessage, getRoles } from '@discordeno';
 | 
					import { DiscordenoMember, getChannel, getMember, getMessage, getRoles, getUser, User } from '@discordeno';
 | 
				
			||||||
import { log, LogTypes as LT } from '@Log4Deno';
 | 
					import { log, LogTypes as LT } from '@Log4Deno';
 | 
				
			||||||
import showdown from '@showdown';
 | 
					import showdown from '@showdown';
 | 
				
			||||||
import { STATUS_CODE, STATUS_TEXT } from '@std/http/status';
 | 
					import { STATUS_CODE, STATUS_TEXT } from '@std/http/status';
 | 
				
			||||||
| 
						 | 
					@ -13,6 +13,10 @@ import utils from 'utils/utils.ts';
 | 
				
			||||||
interface ModernMemberHOTFIX extends DiscordenoMember {
 | 
					interface ModernMemberHOTFIX extends DiscordenoMember {
 | 
				
			||||||
  globalName: string;
 | 
					  globalName: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					interface ModernUserHOTFIX extends User {
 | 
				
			||||||
 | 
					  globalName: string;
 | 
				
			||||||
 | 
					  name: (_gId: bigint) => string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const converter = new showdown.Converter({
 | 
					const converter = new showdown.Converter({
 | 
				
			||||||
  emoji: true,
 | 
					  emoji: true,
 | 
				
			||||||
| 
						 | 
					@ -178,7 +182,8 @@ export const generateWebView = async (query: Map<string, string>): Promise<Respo
 | 
				
			||||||
  let fullPage = generatePage(htmlArr);
 | 
					  let fullPage = generatePage(htmlArr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (fullPage.indexOf('<@&')) {
 | 
					  if (fullPage.indexOf('<@&')) {
 | 
				
			||||||
    const guildRoles = (await getRoles(attachmentMessage.guildId).catch((e) => log(LT.LOG, `Failed to get Guild Roles: ${attachmentMessage.guildId}`, e))) ?? [];
 | 
					    const guildRoles = attachmentMessage.guildId ? (await getRoles(attachmentMessage.guildId).catch((e) => log(LT.LOG, `Failed to get Guild Roles: ${attachmentMessage.guildId}`, e))) ?? [] : [];
 | 
				
			||||||
 | 
					    if (guildRoles.length) {
 | 
				
			||||||
      const rolesToReplace = fullPage.matchAll(/<@&(\d+)>/g);
 | 
					      const rolesToReplace = fullPage.matchAll(/<@&(\d+)>/g);
 | 
				
			||||||
      for (const roleToReplace of rolesToReplace) {
 | 
					      for (const roleToReplace of rolesToReplace) {
 | 
				
			||||||
        const role = guildRoles.filter((r) => r.id === BigInt(roleToReplace[1] ?? '-1')).shift() ?? { name: 'unknown-role', color: 4211819 };
 | 
					        const role = guildRoles.filter((r) => r.id === BigInt(roleToReplace[1] ?? '-1')).shift() ?? { name: 'unknown-role', color: 4211819 };
 | 
				
			||||||
| 
						 | 
					@ -188,6 +193,7 @@ export const generateWebView = async (query: Map<string, string>): Promise<Respo
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (fullPage.indexOf('<#')) {
 | 
					  if (fullPage.indexOf('<#')) {
 | 
				
			||||||
    const channelsToReplace = fullPage.matchAll(/<#(\d+)>/g);
 | 
					    const channelsToReplace = fullPage.matchAll(/<#(\d+)>/g);
 | 
				
			||||||
| 
						 | 
					@ -202,13 +208,16 @@ export const generateWebView = async (query: Map<string, string>): Promise<Respo
 | 
				
			||||||
  if (fullPage.indexOf('<@')) {
 | 
					  if (fullPage.indexOf('<@')) {
 | 
				
			||||||
    const usersToReplace = fullPage.matchAll(/<@(\d+)>/g);
 | 
					    const usersToReplace = fullPage.matchAll(/<@(\d+)>/g);
 | 
				
			||||||
    for (const userToReplace of usersToReplace) {
 | 
					    for (const userToReplace of usersToReplace) {
 | 
				
			||||||
      const rawUser = await getMember(attachmentMessage.guildId, BigInt(userToReplace[1] ?? '-1')).catch((e) => log(LT.LOG, `Failed to get Channel: ${userToReplace[1]}`, e));
 | 
					      const rawUser = attachmentMessage.guildId
 | 
				
			||||||
      const user = rawUser ? (rawUser as ModernMemberHOTFIX) : {
 | 
					        ? await getMember(attachmentMessage.guildId, BigInt(userToReplace[1] ?? '-1')).catch((e) => log(LT.LOG, `Failed to get Channel: ${userToReplace[1]}`, e))
 | 
				
			||||||
 | 
					        : await getUser(BigInt(userToReplace[1] ?? '-1')).catch((e) => log(LT.LOG, `Failed to get Channel: ${userToReplace[1]}`, e));
 | 
				
			||||||
 | 
					      const oldUserShape = rawUser ? rawUser : {
 | 
				
			||||||
        name: (_gId: bigint) => 'unknown-user',
 | 
					        name: (_gId: bigint) => 'unknown-user',
 | 
				
			||||||
        username: 'unknown-user',
 | 
					        username: 'unknown-user',
 | 
				
			||||||
        globalName: 'unknown-user',
 | 
					        globalName: 'unknown-user',
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      const nickName = user.name(attachmentMessage.guildId);
 | 
					      const user = attachmentMessage.guildId ? (oldUserShape as ModernMemberHOTFIX) : (oldUserShape as ModernUserHOTFIX);
 | 
				
			||||||
 | 
					      const nickName = attachmentMessage.guildId ? user.name(attachmentMessage.guildId) : null;
 | 
				
			||||||
      const name = nickName === user.username ? user.globalName : nickName ?? user.globalName;
 | 
					      const name = nickName === user.username ? user.globalName : nickName ?? user.globalName;
 | 
				
			||||||
      fullPage = fullPage.replaceAll(userToReplace[0], makeMention('@', name ?? user.username, '#40446b'));
 | 
					      fullPage = fullPage.replaceAll(userToReplace[0], makeMention('@', name ?? user.username, '#40446b'));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue