Skip to content

Latest commit

 

History

History
591 lines (451 loc) · 16.7 KB

事件监听.md

File metadata and controls

591 lines (451 loc) · 16.7 KB

事件监听

本文档概述botpy的事件监听

目录

准备

import botpy

使用方式

通过继承实现bot.Client, 实现自己的机器人Client

MyClient类中调用函数实现处理事件的功能

class MyClient(botpy.Client):

监听的事件

公域消息事件的监听

首先需要订阅事件public_guild_messages

intents = botpy.Intents(public_guild_messages=True)
client = MyClient(intents=intents)
对应函数 说明
on_at_message_create(self, message: Message) 当收到@机器人的消息时
on_public_message_delete(self, message: Message) 当频道的消息被删除时
  • 注:需要引入Message
from botpy.message import Message
class MyClient(botpy.Client):
    async def on_at_message_create(self, message: Message):
        """
        此处为处理该事件的代码
        """

    async def on_public_message_delete(self, message: Message):
        """
        此处为处理该事件的代码
        """

消息事件的监听

  • 仅 私域 机器人能够设置此 intents

首先需要订阅事件guild_messages

intents = botpy.Intents(guild_messages=True)
client = MyClient(intents=intents)
对应函数 说明
on_message_create(self, message: Message) 发送消息事件,代表频道内的全部消息,而不只是 at 机器人的消息。
内容与 AT_MESSAGE_CREATE 相同
on_message_delete(self, message: Message) 删除(撤回)消息事件
  • 注:需要引入Message
from botpy.message import Message
class MyClient(botpy.Client):
    async def on_message_create(self, message: Message):
        """
        此处为处理该事件的代码
        """

    async def on_message_delete(self, message: Message):
        """
        此处为处理该事件的代码
        """

私信事件的监听

首先需要订阅事件direct_message

intents = botpy.Intents(direct_message=True)
client = MyClient(intents=intents)
对应函数 说明
on_direct_message_create(self, message: DirectMessage) 当收到用户发给机器人的私信消息时
on_direct_message_delete(self, message: DirectMessage) 删除(撤回)消息事件
  • 注:需要引入DirectMessage
from botpy.message import DirectMessage
class MyClient(botpy.Client):
    async def on_direct_message_create(self, message: DirectMessage):
        """
        此处为处理该事件的代码
        """

    async def on_direct_message_delete(self, message: DirectMessage):
        """
        此处为处理该事件的代码
        """

消息相关互动事件的监听

首先需要订阅事件guild_message_reactions

intents = botpy.Intents(guild_message_reactions=True)
client = MyClient(intents=intents)
对应函数 说明
on_message_reaction_add(self, reaction: Reaction) 为消息添加表情表态
on_message_reaction_remove(self, reaction: Reaction) 为消息删除表情表态
  • 注:需要引入Reaction
from botpy.reaction import Reaction
class MyClient(botpy.Client):
    async def on_message_reaction_add(self, reaction: Reaction):
        """
        此处为处理该事件的代码
        """

    async def on_message_reaction_remove(self, reaction: Reaction):
        """
        此处为处理该事件的代码
        """

频道事件的监听

首先需要订阅事件guilds

intents = botpy.Intents(guilds=True)
client = MyClient(intents=intents)
对应函数 说明
on_guild_create(self, guild: Guild) 当机器人加入新guild时
on_guild_update(self, guild: Guild) 当guild资料发生变更时
on_guild_delete(self, guild: Guild) 当机器人退出guild时
on_channel_create(self, channel: Channel) 当channel被创建时
on_channel_update(self, channel: Channel) 当channel被更新时
on_channel_delete(self, channel: Channel) 当channel被删除时
  • 注:需要引入GuildChannel
from botpy.guild import Guild
from botpy.channel import Channel
class MyClient(botpy.Client):
    async def on_guild_create(self, guild: Guild):
        """
        此处为处理该事件的代码
        """

    async def on_guild_update(self, guild: Guild):
        """
        此处为处理该事件的代码
        """

    async def on_guild_delete(self, guild: Guild):
        """
        此处为处理该事件的代码
        """

    async def on_channel_create(self, channel: Channel):
        """
        此处为处理该事件的代码
        """

    async def on_channel_update(self, channel: Channel):
        """
        此处为处理该事件的代码
        """

    async def on_channel_delete(self, channel: Channel):
        """
        此处为处理该事件的代码
        """

频道成员事件的监听

首先需要订阅事件guild_members

intents = botpy.Intents(guild_members=True)
client = MyClient(intents=intents)
对应函数 说明
on_guild_member_add(self, member: Member) 当成员加入时
on_guild_member_update(self, member: Member) 当成员资料变更时
on_guild_member_remove(self, member: Member) 当成员被移除时
  • 注:需要引入GuildMember
from botpy.user import Member
class MyClient(botpy.Client):
    async def on_guild_member_add(self, member: Member):
        """
        此处为处理该事件的代码
        """

    async def on_guild_member_update(self, member: Member):
        """
        此处为处理该事件的代码
        """

    async def on_guild_member_remove(self, member: Member):
        """
        此处为处理该事件的代码
        """

互动事件的监听

首先需要订阅事件interaction

intents = botpy.Intents(interaction=True)
client = MyClient(intents=intents)
对应函数 说明
on_interaction_create(self, interaction: Interaction) 当收到用户发给机器人的私信消息时
  • 注:需要引入Interaction
from botpy.interaction import Interaction
class MyClient(botpy.Client):
    async def on_interaction_create(self, interaction: Interaction):
        """
        此处为处理该事件的代码
        """

消息审核事件的监听

首先需要订阅事件message_audit

intents = botpy.Intents(message_audit=True)
client = MyClient(intents=intents)
对应函数 说明
on_message_audit_pass(self, message: MessageAudit) 消息审核通过
on_message_audit_reject(self, message: MessageAudit) 消息审核不通过
  • 注:需要引入MessageAudit
from botpy.message import MessageAudit
class MyClient(botpy.Client):
    async def on_message_audit_pass(self, message: MessageAudit):
        """
        此处为处理该事件的代码
        """

    async def on_message_audit_reject(self, message: MessageAudit):
        """
        此处为处理该事件的代码
        """

论坛事件的监听

  • 仅 私域 机器人能够设置此 intents

首先需要订阅事件forums

intents = botpy.Intents(forums=True)
client = MyClient(intents=intents)
对应函数 说明
on_forum_thread_create(self, thread: Thread) 当用户创建主题时
on_forum_thread_update(self, thread: Thread) 当用户更新主题时
on_forum_thread_delete(self, thread: Thread) 当用户删除主题时
on_forum_post_create(self, post: Post) 当用户创建帖子时
on_forum_post_delete(self, post: Post) 当用户删除帖子时
on_forum_reply_create(self, reply: Reply) 当用户回复评论时
on_forum_reply_delete(self, reply: Reply) 当用户删除评论时
on_forum_publish_audit_result(self, auditresult: AuditResult) 当用户发表审核通过时
  • 注:需要引入ThreadPostReplyAuditResult
from botpy.forum import Thread
from botpy.types.forum import Post, Reply, AuditResult
class MyClient(botpy.Client):
    async def on_forum_thread_create(self, thread: Thread):
        """
        此处为处理该事件的代码
        """

    async def on_forum_thread_update(self, thread: Thread):
        """
        此处为处理该事件的代码
        """

    async def on_forum_thread_delete(self, thread: Thread):
        """
        此处为处理该事件的代码
        """

    async def on_forum_post_create(self, post: Post):
        """
        此处为处理该事件的代码
        """

    async def on_forum_post_delete(self, post: Post):
        """
        此处为处理该事件的代码
        """

    async def on_forum_reply_create(self, reply: Reply):
        """
        此处为处理该事件的代码
        """

    async def on_forum_reply_delete(self, reply: Reply):
        """
        此处为处理该事件的代码
        """

    async def on_forum_publish_audit_result(self, auditresult: AuditResult):
        """
        此处为处理该事件的代码
        """

音频事件的监听

首先需要订阅事件audio_action

intents = botpy.Intents(audio_action=True)
client = MyClient(intents=intents)
对应函数 说明
on_audio_start(self, audio: Audio) 音频开始播放时
on_audio_finish(self, audio: Audio) 音频播放结束时
on_audio_on_mic(self, audio: Audio) 上麦时
on_audio_off_mic(self, audio: Audio) 下麦时
  • 注:需要引入Audio
from botpy.audio import Audio
class MyClient(botpy.Client):
    async def on_audio_start(self, audio: Audio):
        """
        此处为处理该事件的代码
        """

    async def on_audio_finish(self, audio: Audio):
        """
        此处为处理该事件的代码
        """

    async def on_audio_on_mic(self, audio: Audio):
      """
      此处为处理该事件的代码
      """

    async def on_audio_off_mic(self, audio: Audio):
      """
      此处为处理该事件的代码
      """

音视频/直播子频道成员进出事件

首先需要订阅事件audio_or_live_channel_member

intents = botpy.Intents(audio_or_live_channel_member=True)
client = MyClient(intents=intents)
对应函数 说明
on_audio_or_live_channel_member_enter(self, Public_Audio: PublicAudio) 用户进入音视频/直播子频道时
on_audio_or_live_channel_member_exit(self, Public_Audio: PublicAudio) 用户退出音视频/直播子频道时
  • 注:需要引入PublicAudio
from botpy.audio import PublicAudio
class MyClient(botpy.Client):
  async def on_audio_or_live_channel_member_enter(self, Public_Audio: PublicAudio):
    """
    此处为处理该事件的代码
    """

  async def on_audio_or_live_channel_member_exit(self, Public_Audio: PublicAudio):
    """
    此处为处理该事件的代码
    """

开放论坛事件对象

首先需要订阅事件open_forum_event

intents = botpy.Intents(open_forum_event=True)
client = MyClient(intents=intents)
对应函数 说明
on_open_forum_thread_create(self, open_forum_thread: OpenThread) 用户创建主题时
on_open_forum_thread_update(self, open_forum_thread: OpenThread) 用户修改主题时
on_open_forum_thread_delete(self, open_forum_thread: OpenThread) 用户删除主题时
on_open_forum_post_create(self, open_forum_thread: OpenThread) 用户创建帖子时
on_open_forum_post_delete(self, open_forum_thread: OpenThread) 用户删除帖子时
on_open_forum_reply_create(self, open_forum_thread: OpenThread) 用户回复评论时
on_open_forum_reply_delete(self, open_forum_thread: OpenThread) 用户删除评论时
  • 注:需要引入Audio
from botpy.audio import Audio
class MyClient(botpy.Client):
  async def on_audio_start(self, audio: Audio):
    """
    此处为处理该事件的代码
    """

  async def on_audio_finish(self, audio: Audio):
    """
    此处为处理该事件的代码
    """

  async def on_audio_on_mic(self, audio: Audio):
    """
    此处为处理该事件的代码
    """

  async def on_audio_off_mic(self, audio: Audio):
    """
    此处为处理该事件的代码
    """

订阅事件的方法

方法一:

intents = botpy.Intents()
client = MyClient(intents=intents)

在Intents中填入对应的参数

例子:

intents = botpy.Intents(public_guild_messages=True, direct_message=True, guilds=True)

方法二:

intents = botpy.Intents.none()

然后打开对应的订阅(参数列表)

intents.public_guild_messages = True
intents.direct_message = True
intents.guilds = True
  • 说明

方法二对应的快捷订阅方式为

  1. 订阅所有事件
intents = botpy.Intents.all()
  1. 订阅所有的公域事件
intents = botpy.Intents.default()

参数列表

参数 含义
public_guild_messages 公域消息事件
guild_messages 消息事件 (仅 私域 机器人能够设置此 intents)
direct_message 私信事件
guild_message_reactions 消息相关互动事件
guilds 频道事件
guild_members 频道成员事件
interaction 互动事件
message_audit 消息审核事件
forums 论坛事件 (仅 私域 机器人能够设置此 intents)
audio_action 音频事件