# discord **Repository Path**: hanky/discord ## Basic Information - **Project Name**: discord - **Description**: discord机器人 - **Primary Language**: Unknown - **License**: WTFPL - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-10-08 - **Last Updated**: 2024-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # **discord机器人** ## **需求简介** 1. Discord机器人,能够完成对客户指定关键词的响应 2. 1. 对币种关键词响应,如BTC,返回报价 2. 当用户@机器人时,才做出响应 3. 能够收集群内聊天记录并且落库 ## **任务拆解** 1. 后端做一个机器人api服务,被机器人调用响应指定消息 **discord API java源库**:https://github.com/Javacord/Javacord 1. 使用币安api抓取能够响应当币种信息 2. 1. GET /api/v3/ticker/price 2. 获取交易对最新价格 3. 不带参数获取所有交易对信息 ​ **币安地址**:https://www.binance.com 1. 能够使用币安API抓取币价信息 ​ **币安API**:https://binance-docs.github.io/apidocs/spot/en/ 1. 聊天信息落库 2. 高性能,高并发 ## **功能概述** (1)收集discord信息:通过discord API调用discord机器人,监听discord的信息,通过eventbus将消息异步抛出处理落到本地或制定的消息队列,不阻塞主线程 (2)消息分词:将discord消息通过 IKAnalyer分词器分解,获取关键词 (3)获取币安信息:通过HttpClient获取所需的币安信息,同一天的币安消息放到redis缓存中,避免循环调用接口,提升性能。 (4)高并发情况走redis内部消息队列,启用多个线程执行 (5)自定义监听事件:自定义监听事件,处理处理消息,回复消息。 ## **约束条件** 根据最新的discord通告得知,经过验证的机器人,服务的服务器超过100个,需要申请特权意图,否则无法查看消息体内容。 ![img](https://docimg9.docs.qq.com/image/tmOGV1QqZZoeN2WxIrCGJg.png?w=554&h=278) 详细信息请参考下面地址: https://support-dev.discord.com/hc/en-us/articles/4404772028055-Message-Content-Privileged-Intent-FAQ ## **ER图** ![img](https://docimg1.docs.qq.com/image/Kgl-VLCdxIJf4x3pVL5rLQ.png?w=1628&h=762) ## **时序图** ![img](https://docimg8.docs.qq.com/image/y3VDRUPG44taxUHwhk7b2Q.png?w=1621&h=1011) ## **流程图** ![img](https://docimg10.docs.qq.com/image/ZCMm04CcmS54VatPvQdvCg.png?w=3261&h=1208) ## **技术架构** ![img](https://docimg7.docs.qq.com/image/sB6ommMtidDDF0G5VdMM3w.png?w=1384&h=840) ## **数据结构** **discord消息数据结构:** discord信息的数据是一样的,所以考虑水平分库、水平分表。其中discord机器人标识是分库依据,服务器id与频道id是分表依据 | 字段 | 描述 | 字符集 | | -------------------- | ---------------------- | -------- | | robot_id | 机器人标识 | varchar | | guild_id | 服务器id(工会id) | varchar | | guiild_name | 输出服务器(公会)名称 | varchar | | channel_id | 输出频道id | varchar | | channel_name | 输出频道名称 | varchar | | channel_type | 输出频道类型 | varchar | | member_id | 输出人id | varchar | | member_nickname | 输出人昵称 | varchar | | member_effectivename | 输出人有效名称 | varchar | | member_roles | 输出人角色列表 | varchar | | member_permissions | 输出人权限列表 | varchar | | member_online_status | 输出人状态 | varchar | | message_id | 消息体id | varchar | | message_content_raw | 消息体内容 | longtext | | message_keyword | 消息关键词 | varchar | | message_type | 消息体类型 | varchar | 其中非文本信息,消息体内容存储连接地址,音频或视频等存放在aws cdn **币安价格信息表结构:** **最新价格信息:** | **字段** | **描述** | **字符集** | | -------- | -------- | ----------------- | | symbol | **币种** | **varchar** | | price | **价格** | **decimal(20,8)** | **历史价格:** | **字段** | **描述** | **字符集** | | ----------- | ------------ | ----------------- | | symbol | **币种** | **varchar** | | price | **价格变化** | **decimal(20,8)** | | recieveDate | **获取日期** | | | createTime | **获取时间** | | ## **部署方案** 1个云主机 最低配置:1核 8G内存