Skip to main content

第一个功能

前置

onebot实现配置

在【onebot实现】的配置界面,打开正向websocket(ws),默认端口3001,你可以自己设置。

创建python环境

用你的ide创建虚拟环境,或者直接用系统环境,随你便。

执行pip install eridanus-dep以安装依赖。

实例化bot对象


from Eridanus.adapters.websocket_adapter import WebSocketBot
bot = WebSocketBot('ws://127.0.0.1:3001')

bot.run()

你成功实例化了bot对象,这是良好的开始,我们将在接下来学习监听事件和消息收发。

监听器及其用法

bot是由【事件】驱动的,onebot实现负责把消息传递给eridanus-dep,eridanus将其实例化为事件对象,作为开发者,你的任务就是监听事件并进行相应的处理。

【监听器】需要作为【函数的装饰器】,当onebot实现上报的消息,同监听器监听的事件相符合时,函数将被触发。

【关于sdk】章节中列出了所有可供监听的事件。

@bot.on(GroupMessageEvent)  #监听群消息事件
async def handle_groupmessage(event: GroupMessageEvent):
await bot.send(event, 'Hello, world!')

#简而言之,当机器人收到群消息(GroupMessageEvent)时,就执行下面定义的函数 handle_groupmessage。

我们将它和之前的代码合并


from Eridanus.adapters.websocket_adapter import WebSocketBot
from Eridanus.event.events import GroupMessageEvent

bot = WebSocketBot('ws://127.0.0.1:3001')


@bot.on(GroupMessageEvent)
async def _(event: GroupMessageEvent):
print(event)
await bot.send(event, 'Hello, world!')

bot.run()

运行之后,你在群内发送消息,就会收到bot发送的hello world,同时看到控制台打印了GroupMessageEvent对象的属性,大概是下面这样:

time=1736592298 self_id=3377428814 post_type='message' auto_register=True sub_type='normal' user_id=1840094972 message_type='group' message_id=1009710404 message=[[CQ:text,]] original_message=None font=14 sender=Sender(user_id=1840094972, nickname='呷玛日巴', sex=None, age=None, card='vbjvb', area=None, level=None, role='member', title='') to_me=False reply=None processed_message=[{'text': '3'}] group_id=879886836 anonymous=None real_id=1009710404 message_seq=1009710404 raw_message='3' message_format='array'

我们之后会用到。

设置特定触发条件

使用上面的代码,你会发现所有群里的所有消息,都会触发这玩意,容易被问候全家。这就需要我们进行【判断】。如前所述,event对象有着许多属性,包括消息内容以及发送者、群号等。我们按需判断即可。


from Eridanus.adapters.websocket_adapter import WebSocketBot
from Eridanus.event.events import GroupMessageEvent
bot = WebSocketBot('ws://127.0.0.1:3001')


@bot.on(GroupMessageEvent)
async def handle_groupmessage(event: GroupMessageEvent):
if event.user_id==1840094972: #当发送者qq为1840094972时才会触发
await bot.send(event,"你发牛魔")
if event.pure_text=="我是奶龙": #当发送的内容为【我是奶龙】时才会触发
await bot.send(event,"你发牛魔")


bot.run()

可以判断的类型多种多样,不再赘述。关于这部分,请查看【关于sdk】

恭喜你完成了第一个功能的编写。