记录部署coze-discord-proxy
代理
Discord对话Coze-Bot,实现以API形式请求GPT4模型,提供对话、文生图、图生文、知识库检索等功能🌐 开源地址
如何使用
打开 discord官网 ,登陆后点击设置-高级设置-开发者模式-打开。
创建discord服务器,右键点击此服务器选择
复制服务器ID(GUILD_ID)并记录,在此服务器中创建默认频道,右键点击此频道选择复制频道ID(CHANNEL_ID)并记录。打开 discord开发者平台 登陆。
创建新应用-Bot即
COZE-BOT,并记录该bot专属的token和id(COZE_BOT_ID),此bot为即将被coze托管的bot。创建新应用-Bot即
CDP-BOT,并记录该bot专属的token(BOT_TOKEN),此bot为监听discord消息的bot。两个bot开通对应权限(
Administrator)并邀请进创建好的discord服务器 (过程不在此赘述)。打开 discord官网进入服务器,按F12打开开发者工具,在任一频道内发送一次消息,在开发者工具-
Network中找到请求https://discord.com/api/v9/channels/1206*******703/messages从该接口header中获取Authorization(USER_AUTHORIZATION)并记录。打开 coze官网 创建bot并进行个性化配置(注意
Auto-Suggestion为Default/on(默认不用改))。配置好后选择发布到discord,填写
COZE-BOT的token,发布完成后在discord服务器中可看到COZE-BOT在线并可以@使用。使用上述记录的参数开始配置环境变量并部署本项目。
访问接口文档地址,即可开始调试或集成其他项目。
教程
基于 docker-compose进行部署
# 创建存储目录
mkdir -p /data/coze-discord-proxy && cd $_
 
vim docker-compose.yml
 
version: '3.4'
 
services:
  coze-discord-proxy:
    image: deanxv/coze-discord-proxy:latest
    # 如果你的网络环境访问docker hub不稳定的话,可以把上面的镜像地址改为下面的地址进行下载镜像
    #image: dockerproxy.com/deanxv/coze-discord-proxy:latest
    container_name: coze-discord-proxy
    restart: always
    ports:
      - "7077:7077"
    volumes:
      - ./data:/app/coze-discord-proxy/data
    environment:
      - USER_AUTHORIZATION=MTA5OTg5N************uIfytxUgJfmaXUBHVI
      - BOT_TOKEN=MTE5OTk2xxxxxxxxxxxxxxrwUrUWNbG63w
      - GUILD_ID=119xxxxxxxx796
      - COZE_BOT_ID=119xxxxxxxx7
      - CHANNEL_ID=119xxxxxx24
      - PROXY_SECRET=sk-123456
      #- PROXY_URL=http://xx.xx.xx.xx:7890
      - TZ=Asia/Shanghai
 
# 部署服务
docker compose up -d
# 检查容器服务运行状况
docker ps
docker logs -f coze-discord-proxy
基于 Docker 进行部署
docker run --name coze-discord-proxy -d --restart always \
-p 7077:7077 \
-v $(pwd)/data:/app/coze-discord-proxy/data \
-e USER_AUTHORIZATION="MTA5OTg5N************uIfytxUgJfmaXUBHVI" \
-e BOT_TOKEN="MTE5OTk2************rUWNbG63w" \
-e GUILD_ID="11************96" \
-e COZE_BOT_ID="11************97" \
-e PROXY_SECRET="123456" \
-e CHANNEL_ID="11************24" \
-e TZ=Asia/Shanghai \
deanxv/coze-discord-proxy
其中
USER_AUTHORIZATION,BOT_TOKEN,GUILD_ID,COZE_BOT_ID,PROXY_SECRET,CHANNEL_ID修改为自己的。如果上面的镜像无法拉取,可以尝试使用 GitHub 的 Docker 镜像,将上面的
deanxv/coze-discord-proxy替换为ghcr.io/deanxv/coze-discord-proxy即可。
部署到 Zeabur
Zeabur 的服务器在国外,自动解决了网络的问题,同时免费的额度也足够个人使用
一键部署后 USER_AUTHORIZATION,BOT_TOKEN,GUILD_ID,COZE_BOT_ID,PROXY_SECRET,CHANNEL_ID变量也需要替换!
或手动部署:
首先 fork 一份代码。
进入 Zeabur,使用github登录,进入控制台。
在 Service -> Add Service,选择 Git(第一次使用需要先授权),选择你 fork 的仓库。
Deploy 会自动开始,先取消。
添加环境变量
USER_AUTHORIZATION:MTA5OTg5N************uIfytxUgJfmaXUBHVI主动发送消息的discord用户的授权密钥(多个请以,分隔)
BOT_TOKEN:MTE5OTk************WNbG63w监听消息的Bot-Token
GUILD_ID:11************96两个机器人所在的服务器ID
COZE_BOT_ID:11************97由coze托管的机器人ID
CHANNEL_ID:11************24# [可选]默认频道-(目前版本下该参数仅用来活跃机器人)
PROXY_SECRET:123456[可选]接口密钥-修改此行为请求头校验的值(多个请以,分隔)(与openai-API-KEY用法一致)保存。
选择 Redeploy。
环境变量
USER_AUTHORIZATION此处修改为Discord用户的授权密钥(多个请以,分隔)
BOT_TOKEN此处Toekn为监听对话消息的Discord应用Token
CHANNEL_ID[可选]默认频道-在使用与openai对齐的接口时(/v1/chat/completions) 消息会默认发送到此频道; 3.0.0之后的版本中此参数只是用来确保Coze Bot机器人长时间没有对话的情况下被下线,用来每日凌晨自动执行定时对话任务
GUILD_ID我们创建的2个Discord Bot机器人所在的服务器ID
COZE_BOT_ID这个是我们创建的两个Discord Bot其中一个与Coze关联的Bot ID
CHANNEL_AUTO_DEL_TIME:0[可选]是否启用默认频道[0:否;1:是] (默认为0) 启用后每次对话都会在默认频道中,会话隔离会失效,推荐不设置
ALL_DIALOG_RECORD_ENABLE:0[可选]是否启用全量上下文[0:否;1:是] (默认为1) 关闭后每次对话只会发送messages中最后一个role为user的content,推荐不使用此环境变量
CHANNEL_AUTO_DEL_TIME:5[可选]频道自动删除时间(秒) 此参数为每次对话完成后自动删除频道的时间(默认为5s),为0时则不删除,推荐不使用此环境变量
COZE_BOT_STAY_ACTIVE_ENABLE:1[可选]是否开启每日24点活跃coze-bot的定时任务,默认开启,为0时则不开启,推荐不使用此环境变量
PORT:7077[可选]端口,默认为7077
SWAGGER_ENABLE[可选]是否启用Swagger接口文档[0:否;1:是] (默认为1)
ONLY_OPENAI_API[可选]是否只暴露与openai对齐的接口[0:否;1:是] (默认为0)
PROXY_SECRET[可选]请求头校验的值(前后端统一),配置此参数后,每次发起请求时请求头加上proxy-secret参数,即header中添加proxy-secret:key
REQUEST_OUT_TIME:60[可选]对话接口非流响应下的请求超时时间
STREAM_REQUEST_OUT_TIME:60[可选]对话接口流响应下的每次流返回超时时间
USER_AGENT:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36[可选]discord用户端Agent,使用自己的可能有效防止被ban,不设置时默认使用作者的 推荐使用此环境变量
NOTIFY_TELEGRAM_BOT_TOKEN=6232***********Niz9c[可选]作为通知TelegramBot的Token(通知事件:1.无可用user_authorization;2.BOT_TOKEN关联的BOT触发风控)
NOTIFY_TELEGRAM_USER_ID=10******35[可选]NOTIFY_TELEGRAM_BOT_TOKEN关联的Telegram-Bot推送至该变量关联的Telegram-User(NOTIFY_TELEGRAM_BOT_TOKEN不为空时该变量也不可为空)
PROXY_URL:http://xx.xx.xx.xx:7890[可选]如果你服务器访问不了Discord,那么尝试配置代理。
进阶配置
配置多机器人
部署前在
docker/docker-compose部署同级目录下创建data/config/bot_config.json文件编写该
json文件,bot_config.json格式如下
[
  {
    "proxySecret": "123", // 接口请求密钥(PROXY_SECRET)(注意:此密钥在环境变量PROXY_SECRET中存在时该Bot才可以被匹配到!)
    "cozeBotId": "12***************31", // coze托管的机器人ID
    "model": ["gpt-3.5","gpt-3.5-16k"], // 模型名称(数组格式)(与请求参数中的model对应,如请求中的model在该json中未匹配到则会抛出异常)
    "channelId": "12***************56"  // [可选]discord频道ID(机器人必须在此频道所在的服务器)(目前版本下该参数仅用来活跃机器人)
  },
  {
    "proxySecret": "456",
    "cozeBotId": "12***************64",
    "model": ["gpt-4","gpt-4-16k"],
    "channelId": "12***************78"
  },
  {
    "proxySecret": "789",
    "cozeBotId": "12***************12",
    "model": ["dall-e-3"],
    "channelId": "12***************24"
  }
]重启服务
当有此json配置时,会通过请求头携带的[请求密钥]+请求体中的[
model]联合匹配此配置中的cozeBotId若匹配到多个则随机选择一个。配置很灵活,可以根据自己的需求进行配置。
Zeabur部署多频道
首先 fork 一份代码,修改Dockerfile文件(或者将原文件备份,再新增Dockerfile文件)
FROM deanxv/coze-discord-proxy:latest
RUN mkdir -p /app/coze-discord-proxy/data/config && chmod 777 /app/coze-discord-proxy/data/config
RUN printf '%s' "$BOT_CONFIG" | sed 's/\\/"/g' > /app/coze-discord-proxy/data/config/bot_config.json
WORKDIR /app/coze-discord-proxy/data
EXPOSE 7077
ENTRYPOINT ["/coze-discord-proxy"]
进入 Zeabur,使用github登录,进入控制台。
在 Service -> Add Service,选择 Git(第一次使用需要先授权),选择你 fork 的仓库。
Deploy 会自动开始,先取消。
添加环境变量
BOT_TOKEN:MTE5OTk2xxxxxxxxxxxxxxrwUrUWNbG63w主动发送消息的Bot-Token
GUILD_ID:119xxxxxxxx796两个机器人所在的服务器ID
COZE_BOT_ID:119xxxxxxxx7由coze托管的机器人ID
CHANNEL_ID:119xxxxxx24# 默认频道-在使用与openai对齐的接口时(/v1/chat/completions) 消息会默认发送到此频道
PROXY_SECRET:123456[可选]接口密钥-修改此行为请求头校验的值(多个请以,分隔),配置此参数后,每次发起请求时请求头加上proxy-secret
参数,即header中添加proxy-secret:123,456,789
BOT_CONFIG:
 [
    {
         "proxySecret": "123",
         "cozeBotId": "12***************31",
         "model": ["gpt-3.5","gpt-3.5-16k"], 
         "channelId": "12***************56"
    },
    {
         "proxySecret": "456",
         "cozeBotId": "12***************64",
         "model": ["gpt-4","gpt-4-16k"],
         "channelId": "12***************78"
    },
    {
         "proxySecret": "789",
         "cozeBotId": "12***************12",
         "model": ["dall-e-3"],
         "channelId": "12***************24"
    }
 ]