Skip to content

Commit

Permalink
refa: migrate to satori core and bot association
Browse files Browse the repository at this point in the history
  • Loading branch information
shigma committed May 12, 2024
1 parent be8bcb2 commit 61e4248
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 28 deletions.
55 changes: 35 additions & 20 deletions packages/core/src/bot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { sleep } from '@koishijs/utils'
import { defineProperty, Dict } from 'cosmokit'
import { Adapter, Bot, Fragment } from '@satorijs/core'
import { Context } from './context'
import { Session } from './session'

declare module '@satorijs/core' {
interface Bot {
Expand All @@ -15,28 +16,42 @@ declare module '@satorijs/core' {
defineProperty(Bot, 'filter', false)
defineProperty(Adapter, 'filter', false)

Bot.prototype.getGuildMemberMap = async function getGuildMemberMap(this: Bot, guildId) {
const result: Dict<string> = {}
for await (const member of this.getGuildMemberIter(guildId)) {
result[member.user.id] = member.name || member.user.name
export interface KoishiBot extends Bot<Context> {}

export class KoishiBot {
constructor(ctx: Context) {
ctx.accessor('bot.getGuildMemberMap', { get: () => this.getGuildMemberMap })
ctx.accessor('bot.broadcast', { get: () => this.broadcast })
ctx.accessor('bot.session', { get: () => this.session })
}
return result
}

Bot.prototype.broadcast = async function broadcast(this: Bot<Context>, channels, content, delay = this.ctx.root.config.delay.broadcast) {
const ids: string[] = []
for (let index = 0; index < channels.length; index++) {
if (index && delay) await sleep(delay)
try {
const value = channels[index]
ids.push(...typeof value === 'string'
? await this.sendMessage(value, content)
: Array.isArray(value)
? await this.sendMessage(value[0], content, value[1])
: await this.sendMessage(value.channelId, content, value.guildId, { session: value }))
} catch (error) {
this.ctx.logger('bot').warn(error)
async getGuildMemberMap(guildId: string) {
const result: Dict<string> = {}
for await (const member of this.getGuildMemberIter(guildId)) {
result[member.user.id] = member.name || member.user.name
}
return result
}

async broadcast(channels: (string | [string, string] | Session)[], content: Fragment, delay = this.ctx.root.config.delay.broadcast) {
const ids: string[] = []
for (let index = 0; index < channels.length; index++) {
if (index && delay) await sleep(delay)
try {
const value = channels[index]
ids.push(...typeof value === 'string'
? await this.sendMessage(value, content)
: Array.isArray(value)
? await this.sendMessage(value[0], content, value[1])
: await this.sendMessage(value.channelId, content, value.guildId, { session: value }))
} catch (error) {
this.ctx.logger('bot').warn(error)
}
}
return ids
}

session(event: Partial<Event> = {}) {
return new Session(this, event)
}
return ids
}
12 changes: 7 additions & 5 deletions packages/core/src/context.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { defineProperty, Promisify, Time } from 'cosmokit'
import { Quester, Schema } from '@satorijs/core'
import { HTTP, Schema } from '@satorijs/core'
import { GetEvents, Parameters, ReturnType, ThisType } from 'cordis'
import * as satori from '@satorijs/core'
import * as cordis from 'cordis'
Expand All @@ -11,12 +11,13 @@ import { Processor } from './middleware'
import { SchemaService } from './schema'
import { Permissions } from './permission'
import { KoishiDatabase } from './database'
import { KoishiBot } from './bot'

export type EffectScope = cordis.EffectScope<Context>
export type ForkScope = cordis.ForkScope<Context>
export type MainScope = cordis.MainScope<Context>

export { Adapter, Bot, Element, h, Logger, MessageEncoder, Messenger, Quester, Schema, segment, Universal, z } from '@satorijs/core'
export { Adapter, Bot, Element, h, HTTP, Logger, MessageEncoder, Messenger, Quester, Schema, segment, Universal, z } from '@satorijs/core'
export type { Component, Fragment, Render } from '@satorijs/core'

export { resolveConfig } from 'cordis'
Expand Down Expand Up @@ -60,10 +61,11 @@ export class Context extends satori.Context {
this.provide('i18n', new I18n(this, this.config.i18n), true)
this.provide('schema', new SchemaService(this), true)
this.provide('permissions', new Permissions(this), true)
this.provide('database', undefined, true)
this.provide('model', undefined, true)
this.provide('http', undefined, true)
this.provide('$commander', new Commander(this, this.config), true)
this.provide('koishi.database', new KoishiDatabase(this), true)
this.provide('koishi.bot', new KoishiBot(this), true)
}

/** @deprecated use `ctx.root` instead */
Expand Down Expand Up @@ -117,7 +119,7 @@ export namespace Context {
export interface Config extends Config.Basic, Config.Advanced {
i18n?: I18n.Config
delay?: Config.Delay
request?: Quester.Config
request?: HTTP.Config
}

export const Config = Schema.intersect([
Expand Down Expand Up @@ -188,7 +190,7 @@ Context.Config.list.push(Schema.object({
}).description('延迟设置'))
Context.Config.list.push(Context.Config.Advanced)
Context.Config.list.push(Schema.object({
request: Quester.Config,
request: HTTP.Config,
}))

export abstract class Service<T = any, C extends Context = Context> extends satori.Service<T, C> {
Expand Down
1 change: 0 additions & 1 deletion packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { version } from '../package.json'

export * from '@koishijs/utils'
export * from 'minato'
export * from './bot'
export * from './context'
export * from './database'
export * from './filter'
Expand Down
2 changes: 0 additions & 2 deletions packages/koishi/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

import Loader from '@koishijs/loader'

import '@satorijs/satori'

export { Loader }

export * from '@koishijs/core'
Expand Down

0 comments on commit 61e4248

Please sign in to comment.