转发时显示作者名字
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