Skip to content

Commit

Permalink
feat(core): support session.mention
Browse files Browse the repository at this point in the history
  • Loading branch information
shigma committed May 10, 2021
1 parent 3ca3f72 commit 1425974
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 24 deletions.
1 change: 0 additions & 1 deletion packages/adapter-discord/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ declare module 'koishi-core' {

interface Session {
discord?: {
mentions: DC.User[]
// eslint-disable-next-line camelcase
webhook_id?: DC.snowflake
flags: number
Expand Down
23 changes: 18 additions & 5 deletions packages/adapter-discord/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,24 @@ export async function adaptMessage(bot: DiscordBot, meta: DC.Message, session: P
if (meta.member?.nick) {
session.author.nickname = meta.member?.nick
}

session.mention = {
everyone: meta.mention_everyone,
users: meta.mentions.map(adaptUser),
roles: meta.mention_roles.map(id => ({ id })),
channels: meta.mention_channels.map(data => ({
channelId: data.id,
channelName: data.name,
groupId: data.guild_id,
})),
}

// TODO remove in a future version
session.discord = {
webhook_id: meta.webhook_id,
flags: meta.flags,
}

// https://discord.com/developers/docs/reference#message-formatting
session.content = ''
if (meta.content) {
Expand Down Expand Up @@ -96,11 +114,6 @@ export async function adaptMessage(bot: DiscordBot, meta: DC.Message, session: P
session.content += segment('video', { url: embed.video.url, proxy_url: embed.video.proxy_url })
}
}
session.discord = {
mentions: meta.mentions,
webhook_id: meta.webhook_id,
flags: meta.flags,
}
return session
}

Expand Down
39 changes: 22 additions & 17 deletions packages/adapter-onebot/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,25 +25,30 @@ export const adaptAuthor = (user: OneBot.SenderInfo, anonymous?: OneBot.Anonymou
roles: [user.role],
})

function adaptContent(content: string) {
return segment.transform(content, {
at({ qq }) {
if (qq === 'all') return segment('at', { type: 'all' })
return segment.at(qq)
},
reply(data) {
return segment('quote', data)
},
})
export function adaptMessage(message: OneBot.Message): Koishi.MessageInfo {
const mention = {
roles: [],
channels: [],
} as Koishi.MentionInfo

return {
mention,
messageId: message.messageId.toString(),
timestamp: message.time * 1000,
author: adaptAuthor(message.sender, message.anonymous),
content: segment.transform(message.message, {
at({ qq }) {
if (qq !== 'all') return segment.at(qq)
mention.everyone = true
return segment('at', { type: 'all' })
},
reply(data) {
return segment('quote', data)
},
}),
}
}

export const adaptMessage = (message: OneBot.Message): Koishi.MessageInfo => ({
messageId: message.messageId.toString(),
timestamp: message.time * 1000,
content: adaptContent(message.message),
author: adaptAuthor(message.sender, message.anonymous),
})

export const adaptGroup = (group: OneBot.GroupInfo): Koishi.GroupInfo => ({
groupId: group.groupId.toString(),
groupName: group.groupName,
Expand Down
14 changes: 13 additions & 1 deletion packages/koishi-core/src/adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ export interface GroupInfo {
}

export interface UserBase {
username: string
username?: string
nickname?: string
avatar?: string
discriminator?: string
Expand All @@ -325,6 +325,17 @@ export interface AuthorInfo extends GroupMemberInfo {
anonymous?: string
}

export interface RoleInfo {
id: string
}

export interface MentionInfo {
everyone: boolean
users: UserInfo[]
roles: RoleInfo[]
channels: ChannelInfo[]
}

export interface MessageBase {
messageId?: string
channelId?: string
Expand All @@ -334,6 +345,7 @@ export interface MessageBase {
timestamp?: number
author?: AuthorInfo
quote?: MessageInfo
mention?: MentionInfo
}

export interface MessageInfo extends MessageBase {
Expand Down

0 comments on commit 1425974

Please sign in to comment.