nonebot/nb-cli

FreeBSD下执行nb run报错value is not a valid IPv4 or IPv6 address (type=value_error.ipvanyaddress)

Alex6357 opened this issue · 10 comments

root@localhost:/usr/local/hikaribot # nb run
04-17 21:45:56 [SUCCESS] nonebot | NoneBot is initializing...
Traceback (most recent call last):
  File "/usr/local/hikaribot/bot.py", line 10, in <module>
    nonebot.init()
  File "/usr/local/lib/python3.9/site-packages/nonebot/__init__.py", line 275, in init
    config = Config(
  File "/usr/local/lib/python3.9/site-packages/pydantic/env_settings.py", line 39, in __init__
    super().__init__(
  File "/usr/local/lib/python3.9/site-packages/pydantic/main.py", line 341, in __init__
    raise validation_error
pydantic.error_wrappers.ValidationError: 1 validation error for Config
host
  value is not a valid IPv4 or IPv6 address (type=value_error.ipvanyaddress)

这是pydantic的问题还是FreeBSD环境的问题?

麻烦发一下你的 .env 文件内容

.env:

ENVIRONMENT=prod
HOST=0.0.0.0
PORT=8080
LOG_LEVEL=INFO
FASTAPI_RELOAD=false
COMMAND_START=["/", ""]  # 配置命令起始字符
COMMAND_SEP=["."]  # 配置命令分割字符

API_TOKEN = 123456:qwertyuiopasdfghjl  #请加群联系雨季获取api_key和token Q群:967546463,直接用邮件中的token替换前面这串字符串就行了,没有引号
SUPERUSERS=["1119809439"]       #替换为你自己的QQ号,确认与BOT是好友
USE_PLUGIN_GO_CQHTTP = true     #使用内嵌go-cqhttp插件,如果一直连不上请将此项值改为false,并按教程下载go-cqhttp


private = false                 #开启私聊
group = true                    #开启群聊
channel = false                 #开启频道
all_channel = false             #是否全频道生效,无论此项配置如何,channel_list中的频道一定会开启
channel_list = []               #频道列表白名单,数组形式,可在控制台中获取相应的channel_id
ban_group_list = [967546463]    #群列表黑名单,默认屏蔽了开发者交流群
pupu = true                     #是否开启噗噗
check_cache = true              #是否开启缓存上报,可降低高峰期延迟,如果错误日志中频繁报错上报url:XXXXXXXX,请关闭此项或配置代理
proxy_on = false                #是否启用代理
proxy = http://localhost:7890   #代理地址,如果上面选项开启,这边替换为你本地的
ocr_on = true                   #是否开启ocr(识图指令)
ocr_offline = false             #是否只使用hash验证,即设置为true后只能识别服务器已记录的图片,如果群较多(>300)导致响应延迟较高可以开启
ocr_url = http://mc.youthnp.cn:23338/OCR/           #默认ocr地址,一般不用动

.env.prod:

HOST=0.0.0.0
PORT=8080
LOG_LEVEL=SUCCESS
FASTAPI_RELOAD=false
COMMAND_START=["/", ""]  # 配置命令起始字符
COMMAND_SEP=["."]  # 配置命令分割字符

API_TOKEN = ******  #请加群发送.token help获取api_key和token Q群:967546463,直接用邮件中的token替换前面这串字符串就行了,没有引号
SUPERUSERS=["******"]       #替换为你自己的QQ号,确认与BOT是好友
USE_PLUGIN_GO_CQHTTP = true     #使用内嵌go-cqhttp插件,如果一直连不上请将此项值改为false,并按教程下载go-cqhttp
GOCQ_WEBUI_USERNAME=admin       #如果上一项设置为true,请将此处的账号修改为自定义,不配置账号和密码请删除这两项
GOCQ_WEBUI_PASSWORD=admin       #如果上一项设置为true,请将此处的密码修改为自定义,不配置账号和密码请删除这两项

private = true                 #开启私聊
group = true                    #开启群聊
channel = false                 #开启频道
all_channel = false             #是否全频道生效,无论此项配置如何,channel_list中的频道一定会开启
channel_list = []               #频道列表白名单,数组形式,可在控制台中获取相应的channel_id
ban_group_list = [967546463]    #群列表黑名单,默认屏蔽了开发者交流群
pupu = true                     #是否开启噗噗
check_cache = true              #是否开启缓存上报,可降低高峰期延迟,如果错误日志中频繁报错上报url:XXXXXXXX,请关闭此项或配置代理
proxy_on = false                #是否启用代理
proxy = http://localhost:7890   #代理地址,如果上面选项开启,这边替换为你本地的
ocr_on = false                   #是否开启ocr(识图指令)
ocr_offline = false             #是否只使用hash验证,即设置为true后只能识别服务器已记录的图片,如果群较多(>300)导致响应延迟较高可以开启
ocr_url = http://mc.youthnp.cn:23338/OCR/           #默认ocr地址,一般不用动

这是HikariBot的配置文件,相同的配置在Windows和Linux下都可以正常运行,但是按理说不应该出现兼容问题。另外试过把.env.prod里的HOST改成127.0.0.1,也不行

看上去host并没有什么问题,挺怪的

可以尝试一下去修改一下 /usr/local/lib/python3.9/site-packages/nonebot/__init__.py,加个 print 看看 host 输出什么

可以尝试一下去修改一下 /usr/local/lib/python3.9/site-packages/nonebot/__init__.py,加个 print 看看 host 输出什么

可以具体指导一下吗?因为我没有看明白nonebot/__init__.py是在哪里调用的pydantic

你是不是有个环境变量叫HOST覆盖了配置,然后这个环境变量值还不对

你是不是有个环境变量叫HOST覆盖了配置,然后这个环境变量值还不对

真的是!FreeBSD中有环境变量HOST,类似于Windows的计算机名。
但是这个变量在FreeBSD中非常重要,不能删除,可以让nonebot临时覆盖这个变量吗?如果不行的话我就写一个脚本临时覆盖一下

另外,刚刚第一次执行提示需要pip install nonebot2[fastapi],直接在FreeBSD上执行会pip: No match,但是Windows就可以,很奇怪……
nb driver install fastapi可以正常执行
可能是不同的环境的问题?(FreeBSD使用csh)

env HOST=0.0.0.0 nb run

找不到pip是环境变量的问题或者就没装pip,你用nb装就行

我认为是FreeBSD的csh对中括号解释有问题,另外,csh要使用setenv而不是env,不管怎么样,非常感谢您的帮助!