# Telegram详细内容

1. 官方API参考内容

   https://core.telegram.org/bots/api


# 模块功能需求

## 消息通知

1. 功能概述: 能够根据不同的消息来源, 操作TelegramBotAPI发送消息，消息来源如下：
    1. 接口暴露
    2. AI智能体
    3. 机器人功能
2. 实现优先级: 高

### 接口暴露

1. 通过GIN框架暴露接口，能够方便的进行消息通知
2. 需要有强Token验证才行
    1. 设计握手式Token获取法
    2. 每个Token的有效期为6小时

### 消息通知范围

1. 单对单消息
2. 群组消息

### 通知消息体

1. 通知等级
    1. 消息具备等级
    2. 不同等级的消息模板不一样
2. 通知消息模板
    1. 服务器类-ProjectOctopus
    2. 金融类-ProjectTonyStack

### 通知时间

1. 与通知等级匹配
2. 正常通知时间
    1. 白天时间 8:00-23:00
3. 紧急通知时间
    1. 全天

### Telegram通知实现

1. 向特定用户发送消息
2. 向特定群组发送消息

## 机器人功能

1. 模块描述: 按照预设的特定指令，执行操作
2. 实现优先级: 低
3. 该模块充分考虑功能拓展性，方便后续拓展其他的功能

### 定时提醒功能

1. 机器人指令/notify
2. 当输入指令之后，弹出时间选择窗口（参照iOS的提醒事项设计）
    1. 最下方 提醒内容输入框
    2. 上方显示 日期选项按钮，时间选项按钮，重复选项按钮
    3. 日期选项选中，可以以日历的形式选择提醒日期
    4. 时间按钮选中，默认勾选日期为今天，弹出时间选择
    5. 重复按钮选中，弹出重复提醒选项，每日 每周 每两周 每月 自定义（任意选择星期几）
    6. 显示提交按钮，点击后可以提交
3. 机器人记录提醒时间及内容，按照设计的时间发送提醒内容到对应的聊天
    1. 提醒内容需要持久化保存


### 定时提醒查看清除功能

1. 机器人执行 /notify-list
2. 当输入指令后，弹出本人的全部定时提醒内容
    1. 按照如下的顺序显示
    2. 提醒频率（无则显示 单次提醒） 提醒日期 提醒时间  摘要显示提醒内容
    3. 最右侧显示删除按键，点击弹出确认删除此定时提醒窗口
    4. 确认删除后，项目删除此提醒事项
3. 若无提醒事项
    1. 显示无提醒事项

## 智能体功能

1. 模块描述:  响应@ 根据用户的上下文，给出AI智能解答
2. 实现优先级: 低
3. 消息回复需要引用被@的那条消息和之前的三条消息

### AI来源

1. 需要支持如下厂家来源的API
    1. OpenAI chatgpt
    2. Google Gemini
    3. xAI Grok
    4. openRouter
2. 需要支持思考过程和流式响应
    1. 持续返回消息需要满足消息限制器的要求

## 基础架构设计

### 白名单功能

1. 只能允许白名单内的用户或者群组访问此机器人

### 消息限制器

1. TelegramAPI的消息频率有限制，请参考官方文档，设计相应的消息发送限制器
2. 参照单例模式设计，所有与Telegram交互全部通过消息限制器发送

### 机器人网络代理

1. Telegram机器人构建需要考虑到网络代理的情况，机器人请求TelegramAPI可以接受socks5和http代理

### 持久化保存

1. 持久化信息采用sqlite保存
    1. windows保存至  <UserHome>\naughty_man\
    2. linux保存至 /usr/local/etc/naughty_man/