转发时显示作者名字
This commit is contained in:
		
							parent
							
								
									8e2a266ad6
								
							
						
					
					
						commit
						f416b2a2d0
					
				
							
								
								
									
										48
									
								
								index.ts
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								index.ts
									
									
									
									
									
								
							@ -42,7 +42,7 @@ const parseConfig = () => {
 | 
				
			|||||||
  return parsed
 | 
					  return parsed
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const { qq, mahConfig, groups: groupNumbers } = parseConfig();
 | 
					const { qq: botQQ, mahConfig, groups: groupNumbers } = parseConfig();
 | 
				
			||||||
const mirai = new MiraiTs(mahConfig)
 | 
					const mirai = new MiraiTs(mahConfig)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type StoredMessage = {
 | 
					type StoredMessage = {
 | 
				
			||||||
@ -75,7 +75,7 @@ class StoredMessages {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
async function app() {
 | 
					async function app() {
 | 
				
			||||||
  // 登录 QQ
 | 
					  // 登录 QQ
 | 
				
			||||||
  await mirai.link(qq);
 | 
					  await mirai.link(botQQ);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const groups = groupNumbers.map(group => ({
 | 
					  const groups = groupNumbers.map(group => ({
 | 
				
			||||||
    group,
 | 
					    group,
 | 
				
			||||||
@ -107,13 +107,27 @@ async function app() {
 | 
				
			|||||||
      const promises = groups
 | 
					      const promises = groups
 | 
				
			||||||
        .filter(({ group }) => group !== fromGroup)
 | 
					        .filter(({ group }) => group !== fromGroup)
 | 
				
			||||||
        .map(async ({ group, stored, members }) => {
 | 
					        .map(async ({ group, stored, members }) => {
 | 
				
			||||||
 | 
					          // 把 qq 转换成纯文本的时候,优先使用哪个群里的群名片
 | 
				
			||||||
 | 
					          const qqToName = (qq: number) => {
 | 
				
			||||||
 | 
					            const name = members.get(qq) || originalGroup?.members?.get(qq)
 | 
				
			||||||
 | 
					            if (name !== undefined) {
 | 
				
			||||||
 | 
					              return name
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            for (const { members } of groups) {
 | 
				
			||||||
 | 
					              const found = members.get(qq)
 | 
				
			||||||
 | 
					              if (found !== undefined) {
 | 
				
			||||||
 | 
					                return found
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          let quote: StoredMessage | undefined
 | 
					          let quote: StoredMessage | undefined
 | 
				
			||||||
          let atMeCounter = 0
 | 
					          let atMeCounter = 0
 | 
				
			||||||
          const processed = msg.messageChain.filter(x => {
 | 
					          const processed = msg.messageChain.filter(x => {
 | 
				
			||||||
            // 处理 @
 | 
					            // 处理 @
 | 
				
			||||||
            if (x.type === 'At') {
 | 
					            if (x.type === 'At') {
 | 
				
			||||||
              // 避免转发回复时的 @
 | 
					              // 避免转发回复时的 @
 | 
				
			||||||
              if (quote && x.target === qq) {
 | 
					              if (quote && x.target === botQQ) {
 | 
				
			||||||
                return atMeCounter++ === 0
 | 
					                return atMeCounter++ === 0
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
              return true
 | 
					              return true
 | 
				
			||||||
@ -130,8 +144,8 @@ async function app() {
 | 
				
			|||||||
              return x
 | 
					              return x
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (x.target === qq) {
 | 
					            if (x.target === botQQ) {
 | 
				
			||||||
              x = { ...x, target: quote?.author || qq }
 | 
					              x = { ...x, target: quote?.author || botQQ }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // 转发的消息不应该继续 @ 人,因为人可能并不在被转发的群
 | 
					            // 转发的消息不应该继续 @ 人,因为人可能并不在被转发的群
 | 
				
			||||||
@ -140,26 +154,22 @@ async function app() {
 | 
				
			|||||||
            // 就算确实是为了回复的 @,假如转发的群里这个人不在,那也转成纯文本
 | 
					            // 就算确实是为了回复的 @,假如转发的群里这个人不在,那也转成纯文本
 | 
				
			||||||
            if (x.target !== quote?.author || !members.has(x.target)) {
 | 
					            if (x.target !== quote?.author || !members.has(x.target)) {
 | 
				
			||||||
              // 把 @ 转换成纯文本的时候,优先使用哪个群里的群名片
 | 
					              // 把 @ 转换成纯文本的时候,优先使用哪个群里的群名片
 | 
				
			||||||
              const searchFrom = originalGroup
 | 
					              const name = qqToName(x.target) || x.display
 | 
				
			||||||
                ? [members, originalGroup.members]
 | 
					 | 
				
			||||||
                : [members]
 | 
					 | 
				
			||||||
              searchFrom.push(...groups.map(x => x.members))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
              let name = x.display
 | 
					 | 
				
			||||||
              for (const members of searchFrom) {
 | 
					 | 
				
			||||||
                const match = members.get(x.target)
 | 
					 | 
				
			||||||
                if (match) {
 | 
					 | 
				
			||||||
                  name = match
 | 
					 | 
				
			||||||
                  break
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
              return { type: 'Plain' as const, text: `@${name}` }
 | 
					              return { type: 'Plain' as const, text: `@${name}` }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return x
 | 
					            return x
 | 
				
			||||||
          })
 | 
					          })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          const authorName = qqToName(messageAuthor)
 | 
				
			||||||
 | 
					          if(authorName !== undefined) {
 | 
				
			||||||
 | 
					            if (processed[1]?.type !== 'Plain') {
 | 
				
			||||||
 | 
					              processed.splice(1, 0, { type: 'Plain', text: '' })
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            const firstPlain = processed[1] as Plain
 | 
				
			||||||
 | 
					            firstPlain.text = `${authorName}:` + firstPlain.text
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          try {
 | 
					          try {
 | 
				
			||||||
            const sent = await mirai.api.sendGroupMessage(processed, group, quote?.id)
 | 
					            const sent = await mirai.api.sendGroupMessage(processed, group, quote?.id)
 | 
				
			||||||
            return { sentId: sent.messageId, targetStorage: stored }
 | 
					            return { sentId: sent.messageId, targetStorage: stored }
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user