add: init

This commit is contained in:
taylor
2024-10-11 23:24:28 +08:00
commit 27ba575547
11 changed files with 226 additions and 0 deletions

8
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

10
.idea/maubot-llmplus.iml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

4
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (maubot-llmplus)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/maubot-llmplus.iml" filepath="$PROJECT_DIR$/.idea/maubot-llmplus.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

32
base-config.yaml Normal file
View File

@@ -0,0 +1,32 @@
allowed_users: []
use_platform: local
name:
reply_in_thread:
enable_multi_user:
system_prompt:
platforms:
local:
type: ollama
url: http://localhost:11434
api_key:
model: llama3.2
max_words: 1000
openai:
url:
api_key:
model:
max_tokens:
max_words:
temperature:
anthropic:
url:
api_key:
max_tokens:
model:
max_words:

16
main.py Normal file
View File

@@ -0,0 +1,16 @@
# This is a sample Python script.
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
def print_hi(name):
# Use a breakpoint in the code line below to debug your script.
print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
print_hi('PyCharm')
# See PyCharm help at https://www.jetbrains.com/help/pycharm/

124
maubot-llmplus/ai_bot.py Normal file
View File

@@ -0,0 +1,124 @@
import re
from typing import Type
from maubot import Plugin
from maubot.handlers import event
from mautrix.types import EventType, MessageType, MessageEvent, RelationType, TextMessageEventContent, Format
from mautrix.util import markdown
from mautrix.util.config import BaseProxyConfig, ConfigUpdateHelper
"""
配置文件加载
"""
class Config(BaseProxyConfig):
def db_update(self, helper: ConfigUpdateHelper) -> None:
helper.copy("allowed_users")
helper.copy("use_platform")
helper.copy("name")
helper.copy("reply_in_thread")
helper.copy("enable_multi_user")
helper.copy("system_prompt")
helper.copy("platforms")
class AiBot(Plugin):
# name of the bot
name: str
async def start(self) -> None:
# 加载并更新配置
self.config.load_and_update()
# 决定当前机器人的名称
"""
判断sender是否是allowed_users中的成员
如果是, 则可以发送消息给AI
"""
def is_allow(self, sender: str) -> bool:
# 如果列表中没有元素, 直接返回True
if len(self.config['allowed_users']) <= 0:
return True
for u in self.config['allowed_users']:
self.log.debug(f"bot: {sender} -> {u}")
# 如果sender是allowed_user中的一员, 那么就允许发送消息给AI
if re.Match(u, sender):
return True
self.log.debug(f"{sender} doesn't match allowed_users")
pass
"""
判断是否应该让AI进行回应
回应条件:
前提条件:
消息发送者不是机器人本身 or 不是编辑消息 or 不是消息类型
1. @AI机器人时
2. 消息中呼唤 name变量的值的时候
3. 回复机器人消息时
4. 当聊天室中只有两个人, 并且其中一个是机器人时
5. 在thread中
"""
async def should_respond(self, event: MessageEvent) -> bool:
# 发送者是机器人本身, 返回False
if event.sender == self.client.mxid:
return False
# 判断这个用户是否在允许列表中, 不存在返回False
# 如果列表为空, 继续往下执行
if not self.is_allow(event.sender):
return False
# 不是编辑消息 or 不是消息类型, 返回false
if(event.content['msgtype'] != MessageType.TEXT or
event.content.relates_to['rel_type'] == RelationType.REPLACE):
return False
# 检查是否发送消息中有带上机器人的别名
if re.search("(^|\s)(@)?" + self.name + "([ :,.!?]|$)", event.content.body, re.IGNORECASE):
return True
# 当聊天室只有两个人并且其中一个是机器人时
if len(await self.client.get_joined_members(event.room_id)) == 2:
return True
# 在thread中时
if self.config['reply_in_thread'] and event.content.relates_to.rel_type == RelationType.THREAD:
parent_event = await self.client.get_event(room_id=event.room_id, event_id=event.content.get_thread_parent())
return await self.should_respond(parent_event)
# 如果是回复消息
if event.content.relates_to.in_reply_to:
parent_event = await self.client.get_event(room_id=event.room_id, event_id=event.content.get_reply_to())
if parent_event.sender == self.client.mxid:
return True
async def get_context(self, event: MessageEvent):
return None
async def _ai_call(self, prompt):
return None
@event.on(EventType.ROOM_MESSAGE)
async def on_message(self, event: MessageEvent) -> None:
if not await self.should_respond(event):
return
try:
await event.mark_read()
resp_content = "response test"
await self.client.set_typing(event.room_id, timeout=99999)
response = TextMessageEventContent(msgtype=MessageType.NOTICE, body = resp_content, format = Format.HTML,
formatted_body = markdown.render(resp_content))
await event.respond(response)
except Exception as e:
pass
return None;
@classmethod
def get_config_class(cls) -> Type[BaseProxyConfig]:
return Config

11
maubot.yaml Normal file
View File

@@ -0,0 +1,11 @@
maubot: 0.1.0
id: org.taylorxie.llmplus
version: 1.0.0
license: MIT
modules:
- maubot-llmplus
main_class: AiBot
config: true
extra_files:
- base-config.yaml
database: true

1
requirement.txt Normal file
View File

@@ -0,0 +1 @@
maubot==0.4.2