~cytrogen/blog-public

blog-public/posts/9b61.html -rw-r--r-- 31.2 KiB
88eebf3dCytrogen Deploy 2026-02-19 08:34:27 3 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
<!DOCTYPE html><html lang="zh" data-theme="dark"><head><meta charset="utf-8"><meta name="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Hoka-bot 部署教程 · Cytrogen 的个人博客</title><meta name="description" content="该文档将讲述如何部署 Hoka-bot(以下称为 Hoka)。"><link rel="icon" href="../favicon.png"><link rel="canonical" href="https://cytrogen.icu/posts/9b61.html"><link rel="webmention" href="https://webmention.io/cytrogen.icu/webmention"><link rel="me" href="https://m.otter.homes/@Cytrogen"><link rel="me" href="https://github.com/cytrogen"><meta name="fediverse:creator" content="@Cytrogen@m.otter.homes"><link rel="preload" href="../fonts/opensans-regular-latin.woff2" as="font" type="font/woff2" crossorigin="anonymous"><style>@font-face {
  font-family: 'Open Sans';
  src: url('../fonts/opensans-regular-latin.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  size-adjust: 107%;
  ascent-override: 97%;
  descent-override: 25%;
  line-gap-override: 0%;
}
</style><script>(function() {
  try {
    // 优先级:用户选择 > 系统偏好 > 默认浅色
    const saved = localStorage.getItem('theme');
    const theme = saved || 
      (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
    
    document.documentElement.setAttribute('data-theme', theme);
    document.documentElement.style.colorScheme = theme;
  } catch (error) {
    // 失败时使用默认主题,不阻塞渲染
    document.documentElement.setAttribute('data-theme', 'light');
  }
})();
</script><link rel="stylesheet" href="../css/ares.css"><script data-netlify-skip-bundle="true">(function() {
  document.addEventListener('DOMContentLoaded', function() {
    const theme = document.documentElement.getAttribute('data-theme');
    const pageWrapper = document.getElementById('page-wrapper');
    if (pageWrapper && theme) {
      pageWrapper.setAttribute('data-theme', theme);
    }
  });
})();

</script><!-- hexo injector head_end start -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css">

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/hexo-math@4.0.0/dist/style.css">
<!-- hexo injector head_end end --><meta name="generator" content="Hexo 8.1.1"><link rel="alternate" href="atom.xml" title="Cytrogen 的个人博客" type="application/atom+xml">
</head><body><div id="page-wrapper"><a class="skip-link" href="#main-content">跳到主要内容</a><div class="wrap"><header><a class="logo-link" href="../index.html"><img src="../favicon.png" alt="logo"></a><div class="h-card visually-hidden"><img class="u-photo" src="https://cytrogen.icu/favicon.png" alt="Cytrogen"><a class="p-name u-url u-uid" href="https://cytrogen.icu">Cytrogen</a><p class="p-note">Cytrogen 的个人博客,Cytrogen's Blog</p><a class="u-url" rel="me noopener" target="_blank" href="https://m.otter.homes/@Cytrogen">Mastodon</a><a class="u-url" rel="me noopener" target="_blank" href="https://github.com/cytrogen">GitHub</a></div><nav class="site-nav"><div class="nav-main"><div class="nav-primary"><ul class="nav-list hidden-mobile"><li class="nav-item"><a class="nav-link" href="../index.html">首页</a></li></ul><div class="nav-tools"><div class="language-menu"><button class="language-toggle" type="button"><svg class="icon icon-globe" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm7.5-6.923c-.67.204-1.335.82-1.887 1.855A7.97 7.97 0 0 0 5.145 4H7.5V1.077zM4.09 4a9.267 9.267 0 0 1 .64-1.539 6.7 6.7 0 0 1 .597-.933A7.025 7.025 0 0 0 2.255 4H4.09zm-.582 3.5c.03-.877.138-1.718.312-2.5H1.674a6.958 6.958 0 0 0-.656 2.5h2.49zM4.847 5a12.5 12.5 0 0 0-.338 2.5H7.5V5H4.847zM8.5 5v2.5h2.99a12.495 12.495 0 0 0-.337-2.5H8.5zM4.51 8.5a12.5 12.5 0 0 0 .337 2.5H7.5V8.5H4.51zm3.99 0V11h2.653c.187-.765.306-1.608.338-2.5H8.5zM5.145 12c.138.386.295.744.468 1.068.552 1.035 1.218 1.65 1.887 1.855V12H5.145zm.182 2.472a6.696 6.696 0 0 1-.597-.933A9.268 9.268 0 0 1 4.09 12H2.255a7.024 7.024 0 0 0 3.072 2.472zM3.82 11a13.652 13.652 0 0 1-.312-2.5h-2.49c.062.89.291 1.733.656 2.5H3.82zm6.853 3.472A7.024 7.024 0 0 0 13.745 12H11.91a9.27 9.27 0 0 1-.64 1.539 6.688 6.688 0 0 1-.597.933zM8.5 12v2.923c.67-.204 1.335-.82 1.887-1.855A7.97 7.97 0 0 0 10.855 12H8.5zm3.68-1h2.146c.365-.767.594-1.61.656-2.5h-2.49a13.65 13.65 0 0 1-.312 2.5zm2.802-3.5a6.959 6.959 0 0 0-.656-2.5H12.18c.174.782.282 1.623.312 2.5h2.49zM11.27 2.461c.247.464.462.98.64 1.539h1.835a7.024 7.024 0 0 0-3.072-2.472c.218.284.418.598.597.933zM10.855 4a7.966 7.966 0 0 0-.468-1.068C9.835 1.897 9.17 1.282 8.5 1.077V4h2.355z"></path></svg><span>中文</span></button><div class="language-dropdown"></div></div></div><div class="nav-controls"><div class="more-menu hidden-mobile"><button class="more-toggle" type="button"><span>更多</span><svg class="icon icon-chevron-down" width="12" height="12" viewBox="0 0 12 12" fill="currentColor" aria-hidden="true" focusable="false"><path d="M6 8.825c-.2 0-.4-.1-.5-.2l-3.3-3.3c-.3-.3-.3-.8 0-1.1s.8-.3 1.1 0l2.7 2.7 2.7-2.7c.3-.3.8-.3 1.1 0s.3.8 0 1.1l-3.3 3.3c-.1.1-.3.2-.5.2z"></path></svg></button><div class="more-dropdown"><ul class="dropdown-list"><li class="dropdown-item"><a class="nav-link" href="../archives/index.html">归档</a></li><li class="dropdown-item"><a class="nav-link" href="../categories/index.html">分类</a></li><li class="dropdown-item"><a class="nav-link" href="../tags/index.html">标签</a></li><li class="dropdown-item"><a class="nav-link" href="../about/index.html">关于</a></li><li class="dropdown-item"><a class="nav-link" href="../sitemap/index.html">领地地图</a></li></ul></div></div><div class="theme-switcher"><button class="theme-toggle" type="button" role="switch" aria-pressed="false" aria-label="切换主题"><div class="theme-icon moon-icon"><svg class="icon icon-moon" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z"></path></svg></div><div class="theme-icon sun-icon"><svg class="icon icon-sun" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708z"></path></svg></div></button></div><details class="mobile-menu-details hidden-desktop"><summary class="hamburger-menu" aria-label="nav.menu"><svg class="icon icon-bars" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"></path></svg><span class="menu-text">nav.menu</span></summary><div class="mobile-menu-dropdown"><ul class="mobile-nav-list"><li class="mobile-nav-item"><a class="mobile-nav-link" href="../index.html">首页</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="../archives/index.html">归档</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="../categories/index.html">分类</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="../tags/index.html">标签</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="../about/index.html">关于</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="../sitemap/index.html">领地地图</a></li></ul></div></details></div></div></div></nav></header><main class="container" id="main-content" tabindex="-1"><div class="post"><article class="post-block h-entry"><div class="post-meta p-author h-card visually-hidden"><img class="author-avatar u-photo" src="../favicon.png" alt="Cytrogen"><span class="p-name">Cytrogen</span><a class="u-url" href="https://cytrogen.icu">https://cytrogen.icu</a></div><a class="post-permalink u-url u-uid visually-hidden" href="https://cytrogen.icu/posts/9b61.html">永久链接</a><div class="p-summary visually-hidden"><p>该文档将讲述如何部署 Hoka-bot(以下称为 Hoka)。</p></div><div class="visually-hidden"><a class="p-category" href="../categories/%E7%BC%96%E7%A8%8B%E7%AC%94%E8%AE%B0/">编程笔记</a><a class="p-category" href="../tags/Nonebot/">Nonebot</a></div><h1 class="post-title p-name">Hoka-bot 部署教程</h1><div class="post-info"><time class="post-date dt-published" datetime="2022-06-30T15:04:02.000Z">6/30/2022</time><time class="dt-updated visually-hidden" datetime="2026-02-09T17:16:54.713Z"></time></div><div class="post-content e-content"><html><head></head><body><p>该文档将讲述如何部署 Hoka-bot(以下称为 Hoka)。</p>
<span id="more"></span>
<img src="/posts/9b61/HOKA简介.png" alt="Hokabot-bot">
<div class="danger">
<p>在开始本教程前,需要知道该教程:</p>
<ul>
<li>基于 Python3.9</li>
<li>基于 Linux 系统 / Ubuntu(我是 20.04.1 版本)</li>
<li><strong> 6 月 30 日</strong> 版本的 Hoka-bot 部署教程</li>
</ul>
</div>
<h1 id="开始部署之前"><a class="markdownIt-Anchor" href="#开始部署之前"></a> 开始部署之前</h1>
<blockquote>
<p>理所当然的,你需要将 Hoka 的代码克隆至本地。</p>
</blockquote>
<ol>
<li>
<p>进入 <a target="_blank" rel="noopener" href="https://github.com/Cytrogen/Hoka-Bot">Hoka 的仓库</a></p>
</li>
<li>
<p>如下图所示,克隆或下载代码的压缩文件:</p>
</li>
</ol>
<img src="/posts/9b61/Clone.png" alt="克隆或下载ZIP">
<ol start="3">
<li>得到的文件夹应如下图:</li>
</ol>
<img src="/posts/9b61/主文件夹.png" alt="主文件夹">
<blockquote>
<p>关于 bot 代码结构可以看看 <a target="_blank" rel="noopener" href="https://cytrogen.netlify.app/2022/02/01/nonebot-beta1%E6%95%99%E7%A8%8B/">这篇 Nonebot2 教程</a></p>
</blockquote>
<p>你已经得到了一个 Hoka!但他还是个空壳,无法立马投入使用。</p>
<center>————————</center>
<h1 id="配置hoka的环境配置文件"><a class="markdownIt-Anchor" href="#配置hoka的环境配置文件"></a> 配置 Hoka 的环境配置文件</h1>
<blockquote>
<p>Hoka 部署最为紧要的部分是 <code>.env</code> 文件,也就是 <strong>环境配置文件</strong></p>
</blockquote>
<ol>
<li>
<p>进入 <code>.env</code> 文件进行编辑:</p>
   <figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">ENVIRONMENT=dev</span><br><span class="line"></span><br><span class="line">HOST=127.0.0.1</span><br><span class="line">PORT=56766</span><br><span class="line">LOG_LEVEL=INFO</span><br><span class="line">FASTAPI_RELOAD=true</span><br><span class="line"></span><br><span class="line">SUPERUSERS = [""]</span><br><span class="line">NICKNAME = ["hoka"]</span><br><span class="line">COMMAND_START = ["hoka", ""]</span><br><span class="line">COMMAND_SEP = ["*"]</span><br><span class="line"></span><br><span class="line">GOCQ_ACCOUNR = [</span><br><span class="line">{</span><br><span class="line">   "uin": ,</span><br><span class="line">   "password": "",</span><br><span class="line">   "protocol": 1</span><br><span class="line">}</span><br><span class="line">]</span><br><span class="line">GOCQ_URL = https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-rc3/go-cqhttp_linux_amd64.tar.gz</span><br><span class="line"></span><br><span class="line">APSCHEDULER_AUTOSTART = true</span><br><span class="line"></span><br><span class="line">API_TIMEOUT = 3600</span><br><span class="line"></span><br><span class="line">RAM_CMD = 功能</span><br><span class="line">RAM_ADD = 开启</span><br><span class="line">RAM_RM = 关闭</span><br><span class="line">RAM_SHOW = 查询</span><br><span class="line">RAM_AVAILABLE = 全局查询</span><br><span class="line"></span><br><span class="line">GAME_PATH = ''</span><br><span class="line">MAX_BET_GOLD = 10000</span><br><span class="line"></span><br><span class="line">READ_QQ_FRIENDS = []</span><br><span class="line">READ_QQ_GROUPS = []</span><br><span class="line">READ_INFORM_TIME = [{"HOUR": 9, "MINUTE": 5}]</span><br></pre></td></tr></tbody></table></figure>
</li>
<li>
<ul>
<li>
<p>环境默认为 <code>dev</code>,即 <code>development</code>、开发环境;</p>
</li>
<li>
<p>可更改为 <code>prod</code>,即 <code>production</code>、生产环境;</p>
 <figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ENVIRONMENT=dev</span><br></pre></td></tr></tbody></table></figure>
</li>
</ul>
</li>
</ol>
<br>
<ol start="3">
<li>
<p>如下,这里分别是 <code>HOST 监听IP/主机名</code><code>PORT 监听端口</code><code>LOG LEVEL 日志等级</code><code>FASTAPI_RELOAD</code> 的配置:</p>
<ul>
<li>
<p>下面的端口如果已被使用可以修改为其他数字,其它则都不需要碰。</p>
 <figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">HOST=127.0.0.1</span><br><span class="line">PORT=56766</span><br><span class="line">LOG_LEVEL=INFO</span><br><span class="line">FASTAPI_RELOAD=true</span><br></pre></td></tr></tbody></table></figure>
</li>
</ul>
</li>
<li>
<ul>
<li>
<p>配置 <code>SUPERUSERS 超级用户</code>:超级用户是 Hoka 的管理员,有着最高权限。<br>
这里推荐只写你自己的 QQ 号;</p>
</li>
<li>
<p>配置 <code>NICKNAME bot昵称</code>:不建议修改,因为我都是直接在代码里写的 Hoka,改了没啥用;</p>
</li>
<li>
<p>配置 <code>COMMAND_START 命令前缀</code>:不建议修改,但也不是不能改;</p>
</li>
<li>
<p>配置 <code>COMMAND_SEP 命令隔开符</code>:不咋用到这个,随意更改。</p>
 <figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">SUPERUSERS = [""]</span><br><span class="line">NICKNAME = ["hoka"]</span><br><span class="line">COMMAND_START = ["hoka", ""]</span><br><span class="line">COMMAND_SEP = ["*"]</span><br></pre></td></tr></tbody></table></figure>
</li>
</ul>
</li>
<li>
<p>配置 <code>Go-CQHTTP插件</code></p>
<ul>
<li>
<p><strong>介于该插件的前端可以登录账号,你不需要配置 <code>GOCQ_ACCOUNR</code></strong></p>
</li>
<li>
<p>该插件将会下载 <code>GOCQ_URL</code> 中填写的地址,什么都不输入将自动使用该插件默认的镜像站以及最新版本。</p>
 <figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">GOCQ_ACCOUNR = [</span><br><span class="line">{</span><br><span class="line">   "uin": ,</span><br><span class="line">   "password": "",</span><br><span class="line">   "protocol": 1</span><br><span class="line">}</span><br><span class="line">]</span><br><span class="line">GOCQ_URL = https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-rc3/go-cqhttp_linux_amd64.tar.gz</span><br></pre></td></tr></tbody></table></figure>
</li>
</ul>
</li>
<li>
<p>不需要管这俩。</p>
   <figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">APSCHEDULER_AUTOSTART = true</span><br><span class="line"></span><br><span class="line">API_TIMEOUT = 3600</span><br></pre></td></tr></tbody></table></figure>
</li>
<li>
<p><code>rauthman 权限管理插件</code> 的配置项:</p>
<ul>
<li>
<p>其实只是指令名更改,不建议修改。</p>
 <figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">RAM_CMD = 功能</span><br><span class="line">RAM_ADD = 开启</span><br><span class="line">RAM_RM = 关闭</span><br><span class="line">RAM_SHOW = 查询</span><br><span class="line">RAM_AVAILABLE = 全局查询</span><br></pre></td></tr></tbody></table></figure>
</li>
</ul>
</li>
<li>
<p><code>game 群组游戏插件</code> 的配置项:</p>
<ul>
<li>
<p><code>GAME_PATH</code> 不要碰;</p>
</li>
<li>
<p><code>MAX_BET_GOLD</code> 为俄罗斯轮盘中赌注的上限,可以调低防止一夜暴富一夜回到解放前。</p>
 <figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">GAME_PATH = ''</span><br><span class="line">MAX_BET_GOLD = 10000</span><br></pre></td></tr></tbody></table></figure>
</li>
</ul>
</li>
<li>
<p><code>read_60s 60秒读世界插件</code> 的配置项:</p>
<ul>
<li>
<p><code>READ_QQ_FRIENDS</code> 为每日定时发送的 QQ 好友号;</p>
</li>
<li>
<p><code>READ_QQ_GROUPS</code> 为每日定时发送的 QQ 群聊号;</p>
</li>
<li>
<p><code>READ_INFORM_TIME</code> 为每日定时发送的时间,按照本地时间为标准,如下便是每日早上 9 点 5 分。</p>
 <figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">READ_QQ_FRIENDS = []</span><br><span class="line">READ_QQ_GROUPS = []</span><br><span class="line">READ_INFORM_TIME = [{"HOUR": 9, "MINUTE": 5}]</span><br></pre></td></tr></tbody></table></figure>
</li>
</ul>
</li>
<li>
<p>你已经配置好了环境配置文件!</p>
</li>
</ol>
<center>————————</center>
<h1 id="配置hoka的群组游戏"><a class="markdownIt-Anchor" href="#配置hoka的群组游戏"></a> 配置 Hoka 的群组游戏</h1>
<blockquote>
<p>需要配置的只有群组卡池。</p>
</blockquote>
<ol>
<li>
<p>进入 <code>src/plugins/game/gacha.py</code>,找到 <code>class NormalData</code></p>
   <figure class="highlight python"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">NormalData</span>:</span><br><span class="line">   sixList = []</span><br><span class="line"></span><br><span class="line">   fiveList = []</span><br><span class="line"></span><br><span class="line">   fourList = []</span><br><span class="line"></span><br><span class="line">   threeList = []</span><br><span class="line"></span><br><span class="line">   onelist = [<span class="string">'虾虾'</span>]</span><br><span class="line"></span><br><span class="line">   fiveListUp = []</span><br><span class="line">   sixListUP = []</span><br></pre></td></tr></tbody></table></figure>
</li>
<li>
<p><code>sixList</code> 为卡池的六星角色,<code>fiveList</code> 为五星… 以此类推。<br>
<code>oneList</code> 建议保留为虾虾,因为虾虾这个名字也在代码内,当然你也可以自己一次性全部修改。<br>
<code>fiveListUp</code><code>sixListUP</code> 都是概率 UP 角色。</p>
</li>
<li>
<p>填写格式像这样:<code>sixList = ['名字', '另一个名字']</code></p>
</li>
</ol>
<center>————————</center>
<h1 id="配置go-cqhttp-运行hoka"><a class="markdownIt-Anchor" href="#配置go-cqhttp-运行hoka"></a> 配置 Go-CQHTTP &amp; 运行 Hoka</h1>
<ol>
<li>
<p>首先需要运行一次 Hoka。<br>
在有 <code>bot.py</code> 的主文件夹内开终端输入 <code>python3.9 bot.py</code></p>
</li>
<li>
<p>在终端中找到这么一行:</p>
   <figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[INFO] nonebot_plugin_gocqhttp | Startup complete, Web UI has served to http://127.0.0.1:56766/go-cqhttp/</span><br></pre></td></tr></tbody></table></figure>
</li>
<li>
<p>进入后面的这个地址,页面应如下:</p>
</li>
</ol>
<img src="gocqhttp.png" alt="Go-CQHTTP前端">
<ol start="4">
<li>
<p>点击左上角的 <code>添加账号</code><br>
依次输入 bot 的 QQ 号、密码,并选择登录设备类型。个人通常使用 Android Phone。</p>
</li>
<li>
<p>提交后关闭页面,回到终端关闭过程,再次输入 <code>python3.9 bot.py</code><br>
此时终端会多出来自于 <code>nonebot_plugin_gocqhttp</code> 的信息,并开始登录 bot 账号。<br>
在网络诊断完成后,Hoka 便运行成功,可以使用了。</p>
</li>
</ol>
<center>————————</center>
<h1 id="后言"><a class="markdownIt-Anchor" href="#后言"></a> 后言</h1>
<p>你已经学会如何配置 &amp; 部署 Hoka 了!</p>
</body></html></div></article></div></main><footer><div class="paginator"><a class="prev" href="ec37.html">上一篇</a><a class="next" href="41a5.html">下一篇</a></div><!-- Webmention 显示区域--><div class="webmention-section webmention-empty" data-page-url="posts/9b61.html" data-full-url="https://cytrogen.icu/posts/9b61.html" data-mode="static">
              <h3 class="webmention-title">Webmentions (<span class="webmention-count">0</span>)</h3>
              <div class="webmention-list"></div>
              <span>暂无 Webmentions</span>
            </div><div class="copyright"><p class="footer-links"><a href="../friends/index.html">友链</a><span class="footer-separator"> ·</span><a href="../links/index.html">邻邦</a><span class="footer-separator"> ·</span><a href="../contact/index.html">联络</a><span class="footer-separator"> ·</span><a href="../colophon/index.html">营造记</a><span class="footer-separator"> ·</span><a href="../atom.xml">RSS订阅</a></p><p>© 2025 - 2026 <a href="https://cytrogen.icu">Cytrogen</a>, powered by <a href="https://hexo.io/" target="_blank">Hexo</a> and <a href="https://github.com/cytrogen/hexo-theme-ares" target="_blank">hexo-theme-ares</a>.</p><p><a href="https://blogscn.fun" target="_blank" rel="noopener">BLOGS·CN</a></p></div></footer></div></div><a class="back-to-top" href="#top" aria-label="返回顶部"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"><path d="M3.293 9.707a1 1 0 010-1.414L9.586 2a2 2 0 012.828 0l6.293 6.293a1 1 0 01-1.414 1.414L11 3.414V17a1 1 0 11-2 0V3.414L2.707 9.707a1 1 0 01-1.414 0z"></path></svg></a><script>document.addEventListener('DOMContentLoaded', function() {
  const codeBlocks = document.querySelectorAll('figure.highlight');
  
  codeBlocks.forEach(block => {
    let caption = block.querySelector('figcaption');
    if (!caption) {
      caption = document.createElement('figcaption');
      block.insertBefore(caption, block.firstChild);
    }

    const info = document.createElement('div');
    info.className = 'info';
    
    const filename = caption.querySelector('span');
    if (filename) {
      filename.className = 'filename';
      info.appendChild(filename);
    }
    
    const lang = block.className.split(' ')[1];
    if (lang) {
      const langSpan = document.createElement('span');
      langSpan.className = 'lang-name';
      langSpan.textContent = lang;
      info.appendChild(langSpan);
    }

    const sourceLink = caption.querySelector('a');
    if (sourceLink) {
      sourceLink.className = 'source-link';
      info.appendChild(sourceLink);
    }

    const actions = document.createElement('div');
    actions.className = 'actions';

    const codeHeight = block.scrollHeight;
    const threshold = 300;

    if (codeHeight > threshold) {
      block.classList.add('folded');
      
      const toggleBtn = document.createElement('button');
      toggleBtn.textContent = '展开';
      toggleBtn.addEventListener('click', () => {
        block.classList.toggle('folded');
        toggleBtn.textContent = block.classList.contains('folded') ? '展开' : '折叠';
      });
      actions.appendChild(toggleBtn);
    }

    const copyBtn = document.createElement('button');
    copyBtn.textContent = '复制';
    copyBtn.addEventListener('click', async () => {
      const codeLines = block.querySelectorAll('.code .line');
      const code = Array.from(codeLines)
        .map(line => line.textContent)
        .join('\n')
        .replace(/\n\n/g, '\n');
      
      try {
        await navigator.clipboard.writeText(code);
        copyBtn.textContent = '已复制';
        copyBtn.classList.add('copied');
        
        setTimeout(() => {
          copyBtn.textContent = '复制';
          copyBtn.classList.remove('copied');
        }, 3000);
      } catch (err) {
        console.error('复制失败:', err);
        copyBtn.textContent = '复制失败';
        
        setTimeout(() => {
          copyBtn.textContent = '复制';
        }, 3000);
      }
    });
    actions.appendChild(copyBtn);

    caption.innerHTML = '';
    caption.appendChild(info);
    caption.appendChild(actions);

    const markedLines = block.getAttribute('data-marked-lines');
    if (markedLines) {
      const lines = markedLines.split(',');
      lines.forEach(range => {
        if (range.includes('-')) {
          const [start, end] = range.split('-').map(Number);
          for (let i = start; i <= end; i++) {
            const line = block.querySelector(`.line-${i}`);
            if (line) line.classList.add('marked');
          }
        } else {
          const line = block.querySelector(`.line-${range}`);
          if (line) line.classList.add('marked');
        }
      });
    }
  });
});</script><script async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" id="MathJax-script"></script><script>(function() {
  document.addEventListener('DOMContentLoaded', function() {
    const themeToggle = document.querySelector('.theme-toggle');
    
    if (!themeToggle) return;
    
    const getCurrentTheme = () => {
      return document.documentElement.getAttribute('data-theme') || 'light';
    };
    
    const updateUI = (theme) => {
      const isDark = theme === 'dark';
      themeToggle.setAttribute('aria-pressed', isDark.toString());
    };
    
    const setTheme = (theme) => {
      document.documentElement.setAttribute('data-theme', theme);
      document.documentElement.style.colorScheme = theme;
      
      const pageWrapper = document.getElementById('page-wrapper');
      if (pageWrapper) {
        pageWrapper.setAttribute('data-theme', theme);
      }
      
      // Find and remove the temporary anti-flicker style tag if it exists.
      // This ensures the main stylesheet takes full control after the initial load.
      const antiFlickerStyle = document.getElementById('anti-flicker-style');
      if (antiFlickerStyle) {
        antiFlickerStyle.remove();
      }
      
      localStorage.setItem('theme', theme);
      updateUI(theme);
    };
    
    const toggleTheme = () => {
      const current = getCurrentTheme();
      const newTheme = current === 'light' ? 'dark' : 'light';
      setTheme(newTheme);
    };
    
    updateUI(getCurrentTheme());
    
    themeToggle.addEventListener('click', toggleTheme);
    
    if (window.matchMedia) {
      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
      mediaQuery.addEventListener('change', function(e) {
        if (!localStorage.getItem('theme')) {
          const theme = e.matches ? 'dark' : 'light';
          setTheme(theme);
        }
      });
    }
  });
})();
</script><script src="../js/details-toggle.js" defer></script><script>(function() {
  document.addEventListener('DOMContentLoaded', function() {
    const backToTopBtn = document.querySelector('.back-to-top');
    
    if (!backToTopBtn) return;
    
    const toggleButtonVisibility = () => {
      const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
      const shouldShow = scrollTop > 200;
      
      if (shouldShow) {
        backToTopBtn.classList.add('is-visible');
      } else {
        backToTopBtn.classList.remove('is-visible');
      }
    };
    
    let ticking = false;
    const handleScroll = () => {
      if (!ticking) {
        requestAnimationFrame(() => {
          toggleButtonVisibility();
          ticking = false;
        });
        ticking = true;
      }
    };
    
    const scrollToTop = (event) => {
      event.preventDefault();
      window.scrollTo({
        top: 0,
        behavior: 'smooth'
      });
    };
    
    window.addEventListener('scroll', handleScroll);
    backToTopBtn.addEventListener('click', scrollToTop);
    
    toggleButtonVisibility();
  });
})();</script></body></html>