Skip to content

Group / Discuss

client.pickGroup(<group_id>) 得到 Group 对象,用来发群消息和做群管理。

管理类操作(踢人、禁言、改名片等)需要你在该群是群主或管理员,否则会失败。多数方法返回 Promise<boolean>true 表示成功。

本页示例均假设 client 已登录。

消息

发送群消息

  • 方法:group.sendMsg(content, source?, anony?)
  • 签名:sendMsg(content: Sendable, source?: Quotable, anony?: Omit<Anonymous, "flag"> | boolean): Promise<MessageRet>
  • 描述:向群里发送一条消息。

参数

参数类型必填默认说明
contentSendable-文本、单个消息段或其数组。
sourceQuotable-要引用回复的消息。
anonyboolean | Anonymousfalse是否匿名发送;true 自动获取匿名身份。

返回值

Promise<MessageRet> —— { message_id, seq, rand, time }message_id 是字符串。

失败

被风控、未登录或被全员禁言时抛 ApiRejection

示例

js
// 假设 client 已登录
const { segment } = require("@icqqjs/icqq")

const ret = await client.pickGroup(<group_id>).sendMsg([
  segment.at(<friend_id>),
  "欢迎!",
])
console.log(ret.message_id)
ts
import { segment } from "@icqqjs/icqq"

const ret = await client.pickGroup(<group_id>).sendMsg([segment.at(<friend_id>), "欢迎!"])
console.log(ret.message_id)

相关

消息与消息段 · segment

撤回消息

  • 方法:group.recallMsg(message_id)
  • 签名(重载):
    • recallMsg(message_id: string): Promise<boolean>
    • recallMsg(message: GroupMessage): Promise<boolean>
    • recallMsg(seq: number, rand: number, pktnum?: number): Promise<boolean>
  • 描述:撤回一条群消息(撤回别人的消息需要管理权限)。

参数

参数类型必填默认说明
message_idstring-最常用:传 message_id
messageGroupMessage-也可直接传收到的群消息对象。

返回值

Promise<boolean> —— 是否成功。

示例

js
// 假设 client 已登录
client.on("message.group", async (e) => {
  if (e.raw_message.includes("广告")) {
    await e.group.recallMsg(e.message_id)
  }
})
ts
client.on("message.group", async (e) => {
  if (e.raw_message.includes("广告")) await e.group.recallMsg(e.message_id)
})

群员管理

踢出群员

  • 方法:group.kickMember(uin, msg?, block?)
  • 签名:kickMember(uin: number, msg?: string, block?: boolean): Promise<boolean>
  • 描述:把某个群员踢出群。

参数

参数类型必填默认说明
uinnumber-群员 QQ 号。
msgstring-附带的踢出消息。
blockbooleanfalse是否一并屏蔽(不允许再加群)。

返回值

Promise<boolean> —— 是否成功。

示例

js
// 假设 client 已登录
await client.pickGroup(<group_id>).kickMember(<friend_id>)
ts
await client.pickGroup(<group_id>).kickMember(<friend_id>)

禁言群员

  • 方法:group.muteMember(uin, duration?)
  • 签名:muteMember(uin: number, duration?: number): Promise<boolean>
  • 描述:禁言某个群员。

参数

参数类型必填默认说明
uinnumber-群员 QQ 号。
durationnumber600禁言时长(秒);传 0 表示解除禁言。

返回值

Promise<boolean> —— 是否成功。

示例

js
// 假设 client 已登录
await client.pickGroup(<group_id>).muteMember(<friend_id>, 600) // 禁言 10 分钟
await client.pickGroup(<group_id>).muteMember(<friend_id>, 0)   // 解除
ts
await client.pickGroup(<group_id>).muteMember(<friend_id>, 600)
await client.pickGroup(<group_id>).muteMember(<friend_id>, 0)

全员禁言

  • 方法:group.muteAll(yes?)
  • 签名:muteAll(yes?: boolean): Promise<boolean>
  • 描述:开启 / 关闭全员禁言。

参数

参数类型必填默认说明
yesbooleantruetrue 开启,false 关闭。

返回值

Promise<boolean> —— 是否成功。

示例

js
// 假设 client 已登录
await client.pickGroup(<group_id>).muteAll(true)
ts
await client.pickGroup(<group_id>).muteAll(true)

设置群名片

  • 方法:group.setCard(uin, card?)
  • 签名:setCard(uin: number, card?: string): Promise<boolean>
  • 描述:修改某群员的群名片。

参数

参数类型必填默认说明
uinnumber-群员 QQ 号。
cardstring""新名片,空字符串表示清空。

返回值

Promise<boolean> —— 是否成功。

设置管理员

  • 方法:group.setAdmin(uin, yes?)
  • 签名:setAdmin(uin: number, yes?: boolean): Promise<boolean>
  • 描述:设置 / 取消某群员为管理员(需群主权限)。

参数

参数类型必填默认说明
uinnumber-群员 QQ 号。
yesbooleantruetrue 设为管理员,false 取消。

返回值

Promise<boolean> —— 是否成功。

设置群头衔

  • 方法:group.setTitle(uin, title?, duration?)
  • 签名:setTitle(uin: number, title?: string, duration?: number): Promise<boolean>
  • 描述:给某群员设置专属头衔(需群主权限)。

参数

参数类型必填默认说明
uinnumber-群员 QQ 号。
titlestring""头衔名,空字符串表示清除。
durationnumber-1持续秒数,-1 表示永久。

返回值

Promise<boolean> —— 是否成功。

示例

js
// 假设 client 已登录
await client.pickGroup(<group_id>).setCard(<friend_id>, "新人小王")
await client.pickGroup(<group_id>).setAdmin(<friend_id>, true)
await client.pickGroup(<group_id>).setTitle(<friend_id>, "活跃之星")
ts
await client.pickGroup(<group_id>).setCard(<friend_id>, "新人小王")
await client.pickGroup(<group_id>).setAdmin(<friend_id>, true)
await client.pickGroup(<group_id>).setTitle(<friend_id>, "活跃之星")

群设置

设置群名

  • 方法:group.setName(name)
  • 签名:setName(name: string): Promise<boolean>
  • 描述:修改群名。

参数

参数类型必填默认说明
namestring-新群名。

返回值

Promise<boolean> —— 是否成功。

发送群公告

  • 方法:group.announce(content)
  • 签名:announce(content: string): Promise<boolean>
  • 描述:发布一条简易群公告。

参数

参数类型必填默认说明
contentstring-公告内容。

返回值

Promise<boolean> —— 是否成功。

示例

js
// 假设 client 已登录
await client.pickGroup(<group_id>).setName("我的新群名")
await client.pickGroup(<group_id>).announce("欢迎大家,请遵守群规")
ts
await client.pickGroup(<group_id>).setName("我的新群名")
await client.pickGroup(<group_id>).announce("欢迎大家,请遵守群规")

群员列表与精华

获取群员列表

  • 方法:group.getMemberMap(no_cache?)
  • 签名:getMemberMap(no_cache?: boolean): Promise<Map<number, MemberInfo>>
  • 描述:获取群员列表(键是群员 QQ 号)。第一次会从服务器拉取并缓存。

参数

参数类型必填默认说明
no_cachebooleanfalsetrue 强制忽略缓存重新拉取。

返回值

Promise<Map<number, MemberInfo>> —— 群员 QQ 号到资料的映射。

示例

js
// 假设 client 已登录
const members = await client.pickGroup(<group_id>).getMemberMap()
console.log("群人数:", members.size)
for (const [uin, info] of members) {
  console.log(uin, info.card || info.nickname)
}
ts
const members = await client.pickGroup(<group_id>).getMemberMap()
console.log("群人数:", members.size)

添加精华消息

  • 方法:group.addEssence(seq, rand)
  • 签名:addEssence(seq: number, rand: number): Promise<string>
  • 描述:把指定群消息设为精华。seqrand 来自消息对象 / MessageRet

参数

参数类型必填默认说明
seqnumber-消息序号。
randnumber-消息随机值。

返回值

Promise<string> —— 成功时返回提示文案;失败抛 ApiRejection

message_id 更方便:见 client.setEssenceMessage(message_id)。对应 removeEssence(seq, rand) 移除精华。

示例

js
// 假设 client 已登录
client.on("message.group", async (e) => {
  if (e.raw_message === "加精") {
    await e.group.addEssence(e.seq, e.rand)
  }
})
ts
client.on("message.group", async (e) => {
  if (e.raw_message === "加精") await e.group.addEssence(e.seq, e.rand)
})

其他群操作

邀请好友入群

  • 方法:group.invite(uin)
  • 签名:invite(uin: number): Promise<boolean>
  • 描述:邀请一个好友加入本群。

参数

参数类型必填默认说明
uinnumber-要邀请的好友 QQ 号。

返回值

Promise<boolean> —— 是否成功。

退群

  • 方法:group.quit()
  • 签名:quit(): Promise<boolean>
  • 描述:退出本群;若自己是群主则解散该群

参数

无。

返回值

Promise<boolean> —— 是否成功。

群打卡

  • 方法:group.sign()
  • 签名:sign(): Promise<{ result: number }>
  • 描述:在本群打卡。

参数

无。

返回值

Promise<{ result: number }>

示例

js
// 假设 client 已登录
await client.pickGroup(<group_id>).invite(<friend_id>)
await client.pickGroup(<group_id>).sign()
// await client.pickGroup(<group_id>).quit()
ts
await client.pickGroup(<group_id>).invite(<friend_id>)
await client.pickGroup(<group_id>).sign()

紧凑方法表

方法签名说明
pickMember(uin, strict?)(uin: number) => Member取该群的某个群员对象。
pokeMember(uin)(uin: number) => Promise<boolean>群内戳一戳某人。
setRemark(remark?)(remark?: string) => Promise<void>设置群备注(仅自己可见)。
setAvatar(file)(file: string | Buffer) => Promise<void>设置群头像(需管理权限)。
getAvatarUrl(size?, history?)(size?, history?) => string拼出群头像 URL。
getChatHistory(seq?, cnt?)(seq?, cnt?) => Promise<GroupMessage[]>取群聊记录。
getAtAllRemainder()() => Promise<number>查 @全体成员 今日剩余次数。
getFileUrl(fid)(fid: string) => Promise<string>取群文件下载地址。
markRead(seq?)(seq?: number) => Promise<void>标记群消息已读。
allowAnony(yes?)(yes?: boolean) => Promise<boolean>开 / 关匿名聊天。
removeEssence(seq, rand)(seq, rand) => Promise<string>移除精华消息。
renew()() => Promise<GroupInfo>强制刷新群资料。

getter 属性

直接读取的只读属性(不是方法)。

属性类型说明
group_id / gidnumber群号。
infoGroupInfo | undefined群资料对象。
namestring | undefined群名。
is_ownerboolean我是否是群主。
is_adminboolean我是否是管理员(含群主)。
all_mutedboolean当前是否全员禁言。
mute_leftnumber我的禁言剩余秒数。
fsGfs群文件系统对象,见 群文件 Gfs
js
// 假设 client 已登录
const g = client.pickGroup(<group_id>)
console.log(g.name, g.is_admin, g.all_muted)
// 群文件操作走 g.fs
ts
const g = client.pickGroup(<group_id>)
console.log(g.name, g.is_admin, g.all_muted)

讨论组 Discuss

讨论组是较少使用的群聊形态,对象用 client.pickDiscuss(<group_id>) 得到。它能力很简单,主要只有发消息。Group 实际上继承自 Discuss

发送消息

  • 方法:discuss.sendMsg(content)
  • 签名:sendMsg(content: Sendable): Promise<MessageRet>
  • 描述:向讨论组发送一条消息。

参数

参数类型必填默认说明
contentSendable-消息内容。

返回值

Promise<MessageRet>(讨论组的 message_id 为空字符串,不支持按 id 撤回)。

示例

js
// 假设 client 已登录
await client.pickDiscuss(<group_id>).sendMsg("讨论组消息")
ts
await client.pickDiscuss(<group_id>).sendMsg("讨论组消息")

相关

Member · 群文件 Gfs · 消息与消息段 · Client