qwen-alpha 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +21 -0
- package/.nvmrc +1 -0
- package/.prettierrc +9 -0
- package/LICENSE +21 -0
- package/PUBLISH.md +252 -0
- package/README.md +282 -0
- package/bin/qwen-alpha.js +95 -0
- package/package.json +50 -0
- package/src/bot/bot.js +81 -0
- package/src/bot/handlers/admin.js +231 -0
- package/src/bot/handlers/file.js +177 -0
- package/src/bot/handlers/help.js +43 -0
- package/src/bot/handlers/message.js +132 -0
- package/src/bot/handlers/reset.js +53 -0
- package/src/bot/handlers/settings.js +39 -0
- package/src/bot/handlers/start.js +65 -0
- package/src/bot/handlers/stats.js +76 -0
- package/src/bot/middleware/auth.js +70 -0
- package/src/bot/middleware/logging.js +55 -0
- package/src/bot/middleware/rateLimit.js +74 -0
- package/src/bot/middleware/session.js +63 -0
- package/src/config/index.js +57 -0
- package/src/index.js +86 -0
- package/src/services/db/admins.js +146 -0
- package/src/services/db/index.js +177 -0
- package/src/services/db/sessions.js +342 -0
- package/src/services/db/stats.js +223 -0
- package/src/services/db/users.js +215 -0
- package/src/services/qwenService.js +254 -0
- package/src/utils/logger.js +127 -0
- package/src/utils/paths.js +63 -0
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
env: {
|
|
3
|
+
node: true,
|
|
4
|
+
es2021: true,
|
|
5
|
+
},
|
|
6
|
+
extends: ['eslint:recommended'],
|
|
7
|
+
parserOptions: {
|
|
8
|
+
ecmaVersion: 'latest',
|
|
9
|
+
sourceType: 'module',
|
|
10
|
+
},
|
|
11
|
+
rules: {
|
|
12
|
+
'no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
|
|
13
|
+
'semi': ['error', 'always'],
|
|
14
|
+
'quotes': ['warn', 'single'],
|
|
15
|
+
'no-console': 'off',
|
|
16
|
+
'no-eval': 'error',
|
|
17
|
+
'eqeqeq': ['error', 'always'],
|
|
18
|
+
'curly': ['error', 'all'],
|
|
19
|
+
},
|
|
20
|
+
ignorePatterns: ['node_modules/', 'logs/', '*.log'],
|
|
21
|
+
};
|
package/.nvmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
18
|
package/.prettierrc
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 JeBance
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/PUBLISH.md
ADDED
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# π ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΡ Qwen Alpha
|
|
2
|
+
|
|
3
|
+
## β
Π§Π΅ΠΊ-Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ
|
|
4
|
+
|
|
5
|
+
- [ ] ΠΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ (`npm install`)
|
|
6
|
+
- [ ] Π’Π΅ΡΡΡ ΠΏΡΠΎΡ
ΠΎΠ΄ΡΡ (`npm test`)
|
|
7
|
+
- [ ] ΠΠΈΠ½ΡΠΈΠ½Π³ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ (`npm run lint`)
|
|
8
|
+
- [ ] README.md Π°ΠΊΡΡΠ°Π»Π΅Π½
|
|
9
|
+
- [ ] Version Π² package.json ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ½
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## π¦ ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π½Π° npm
|
|
14
|
+
|
|
15
|
+
### 1. ΠΠΎΠ³ΠΈΠ½ Π² npm
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm login
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
ΠΠ²Π΅Π΄ΠΈΡΠ΅ Π²Π°Ρ Π»ΠΎΠ³ΠΈΠ½, ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ email.
|
|
22
|
+
|
|
23
|
+
### 2. ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅Π΄ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° package.json
|
|
27
|
+
npm pkg get
|
|
28
|
+
|
|
29
|
+
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ
|
|
30
|
+
npm pack --dry-run
|
|
31
|
+
|
|
32
|
+
# ΠΡΠΎΡΠΌΠΎΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ .tgz
|
|
33
|
+
tar -tzf qwen-alpha-1.0.0.tgz
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 3. ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ
|
|
40
|
+
npm publish
|
|
41
|
+
|
|
42
|
+
# ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ beta Π²Π΅ΡΡΠΈΠΈ (Π½Π΅ Π·Π°ΡΡΠΎΠ½Π΅Ρ latest)
|
|
43
|
+
npm publish --tag beta
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 4. ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° npmjs.com
|
|
50
|
+
npm view qwen-alpha
|
|
51
|
+
|
|
52
|
+
# ΠΠ»ΠΈ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ https://www.npmjs.com/package/qwen-alpha
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## π§ͺ Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ
|
|
58
|
+
|
|
59
|
+
### 1. ΠΠ»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npm install -g qwen-alpha
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 2. ΠΡΠΎΠ²Π΅ΡΠΊΠ° CLI
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
qwen-alpha --version
|
|
69
|
+
qwen-alpha --help
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 3. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡ
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
qwen-alpha --init-only
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π»Π°ΡΡ ΠΏΠ°ΠΏΠΊΠ° `~/.qwen-alpha/`.
|
|
79
|
+
|
|
80
|
+
### 4. ΠΠ°ΠΏΡΡΠΊ Π±ΠΎΡΠ°
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
qwen-alpha --token <YOUR_BOT_TOKEN>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## π ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ
|
|
89
|
+
|
|
90
|
+
### SemVer (Semantic Versioning)
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
MAJOR.MINOR.PATCH
|
|
94
|
+
β β β
|
|
95
|
+
β β ββ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
|
|
96
|
+
β ββββββββ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
|
|
97
|
+
ββββββββββββββ Π»ΠΎΠΌΠ°ΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### ΠΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΈ
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π°Π³ΠΎΠ² (1.0.0 β 1.0.1)
|
|
104
|
+
npm version patch
|
|
105
|
+
|
|
106
|
+
# ΠΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (1.0.0 β 1.1.0)
|
|
107
|
+
npm version minor
|
|
108
|
+
|
|
109
|
+
# ΠΠΎΠΌΠ°ΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ (1.0.0 β 2.0.0)
|
|
110
|
+
npm version major
|
|
111
|
+
|
|
112
|
+
# Pre-release Π²Π΅ΡΡΠΈΠΈ (1.0.0 β 1.0.1-beta.0)
|
|
113
|
+
npm version prerelease --preid=beta
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
ΠΠΎΡΠ»Π΅ `npm version` Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡ package.json ΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ git tag.
|
|
117
|
+
|
|
118
|
+
### ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# Push ΠΊΠΎΠΌΠΌΠΈΡΠ° ΠΈ ΡΠ΅Π³Π°
|
|
122
|
+
git push && git push --tags
|
|
123
|
+
|
|
124
|
+
# ΠΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π½Π° npm
|
|
125
|
+
npm publish
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## π Π£ΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ
|
|
131
|
+
|
|
132
|
+
### ΠΡΠΈΠ±ΠΊΠ° "You cannot publish over the previously published versions"
|
|
133
|
+
|
|
134
|
+
ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΡ:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
npm version patch
|
|
138
|
+
npm publish
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### ΠΡΠΈΠ±ΠΊΠ° "npm ERR! 403 Forbidden"
|
|
142
|
+
|
|
143
|
+
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΡΠΎ Π²Ρ Π·Π°Π»ΠΎΠ³ΠΈΠ½Π΅Π½Ρ ΠΈ ΡΠ²Π»ΡΠ΅ΡΠ΅ΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ°:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
npm whoami
|
|
147
|
+
npm owner ls qwen-alpha
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### ΠΡΠΈΠ±ΠΊΠ° "package.json name ΡΠΆΠ΅ Π·Π°Π½ΡΡ"
|
|
151
|
+
|
|
152
|
+
ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ name Π² package.json Π½Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## π Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ° npm
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# ΠΡΠΎΡΠΌΠΎΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ΅
|
|
160
|
+
npm view qwen-alpha
|
|
161
|
+
|
|
162
|
+
# ΠΡΠ΅ Π²Π΅ΡΡΠΈΠΈ
|
|
163
|
+
npm view qwen-alpha versions
|
|
164
|
+
|
|
165
|
+
# ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
|
|
166
|
+
npm view qwen-alpha dependencies
|
|
167
|
+
|
|
168
|
+
# ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°Π³ΡΡΠ·ΠΎΠΊ
|
|
169
|
+
npm install -g npm-views
|
|
170
|
+
npm-views qwen-alpha
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## π ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ
|
|
176
|
+
|
|
177
|
+
### ΠΠ΅ΡΠ΅Π΄ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅:
|
|
178
|
+
|
|
179
|
+
1. **ΠΠ΅Ρ Π»ΠΈ .env ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ**
|
|
180
|
+
```bash
|
|
181
|
+
git ls-files | grep .env
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
2. **Π’ΠΎΠΊΠ΅Π½ Π±ΠΎΡΠ° Π½Π΅ Π² ΠΊΠΎΠ΄Π΅**
|
|
185
|
+
- Π’ΠΎΠΊΠ΅Π½ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· CLI `--token`
|
|
186
|
+
- ΠΠ»ΠΈ ΡΠ΅ΡΠ΅Π· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ `BOT_TOKEN`
|
|
187
|
+
|
|
188
|
+
3. **npm audit**
|
|
189
|
+
```bash
|
|
190
|
+
npm audit
|
|
191
|
+
npm audit fix
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## π ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
|
|
197
|
+
|
|
198
|
+
### ΠΠ°Π·ΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΡΠΊ
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
qwen-alpha --token 123456789:ABCdefGHIjklMNOpqrsTUVwxyz
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Π‘ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
qwen-alpha --token <TOKEN> --log-level debug
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Π‘ whitelist ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
qwen-alpha --token <TOKEN> --allowed-users 123456789,987654321
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Π§Π΅ΡΠ΅Π· Docker (ΠΏΡΠΈΠΌΠ΅Ρ)
|
|
217
|
+
|
|
218
|
+
```dockerfile
|
|
219
|
+
FROM node:18-alpine
|
|
220
|
+
RUN npm install -g qwen-alpha @qwen-code/qwen-code
|
|
221
|
+
CMD ["qwen-alpha", "--token", "$BOT_TOKEN"]
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## π― Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ
|
|
227
|
+
|
|
228
|
+
1. **ΠΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΎΡΠ° Π² Telegram**
|
|
229
|
+
- ΠΡΠΊΡΠΎΠΉΡΠ΅ https://t.me/BotFather
|
|
230
|
+
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±ΠΎΡΠ° Π΅ΡΠ»ΠΈ Π΅ΡΡ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½
|
|
231
|
+
- ΠΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠΊΠ΅Π½
|
|
232
|
+
|
|
233
|
+
2. **ΠΠ°ΡΡΡΠΎΠΈΡΡ Π±ΠΎΡΠ°**
|
|
234
|
+
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π°Π²Π°ΡΠ°Ρ (Π»ΠΎΠ³ΠΎΡΠΈΠΏ)
|
|
235
|
+
- ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ description ΠΈ about
|
|
236
|
+
|
|
237
|
+
3. **ΠΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»**
|
|
238
|
+
- `/start` β ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅
|
|
239
|
+
- `/help` β ΡΠΏΡΠ°Π²ΠΊΠ°
|
|
240
|
+
- ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° Π°Π½Π°Π»ΠΈΠ·
|
|
241
|
+
|
|
242
|
+
4. **ΠΠΎΠ±Π°Π²ΠΈΡΡ Π² Π³ΡΡΠΏΠΏΡ** (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
|
|
243
|
+
- ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π±ΠΎΡΠ° Π² Π³ΡΡΠΏΠΏΡ
|
|
244
|
+
- ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ `/qwen` ΠΊΠΎΠΌΠ°Π½Π΄
|
|
245
|
+
|
|
246
|
+
5. **ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³**
|
|
247
|
+
- Π‘Π»Π΅Π΄ΠΈΡΠ΅ Π·Π° Π»ΠΎΠ³Π°ΠΌΠΈ Π² `~/.qwen-alpha/logs/`
|
|
248
|
+
- ΠΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ `/admin stats`
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
**Π£Π΄Π°ΡΠΈ Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ! π**
|
package/README.md
ADDED
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# Qwen Alpha
|
|
2
|
+
|
|
3
|
+
[](https://github.com/JeBance/QwenAlpha/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/qwen-alpha)
|
|
5
|
+
[](https://github.com/JeBance/QwenAlpha/blob/main/LICENSE)
|
|
6
|
+
|
|
7
|
+
**Telegram Π±ΠΎΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Qwen Code** β AI-powered code review, Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ Π°Π½Π°Π»ΠΈΠ· ΠΏΡΡΠΌΠΎ Π² Telegram.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## π ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
|
|
12
|
+
|
|
13
|
+
### Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g qwen-alpha
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
|
|
20
|
+
|
|
21
|
+
- **Node.js** >= 18.0.0
|
|
22
|
+
- **Qwen Code** (Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ): `npm install -g @qwen-code/qwen-code`
|
|
23
|
+
- **Telegram Bot Token** (ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Ρ [@BotFather](https://t.me/BotFather))
|
|
24
|
+
|
|
25
|
+
### ΠΠ°ΠΏΡΡΠΊ
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
qwen-alpha --token <YOUR_BOT_TOKEN>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
ΠΠ»ΠΈ ΡΠ΅ΡΠ΅Π· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
export BOT_TOKEN=<YOUR_BOT_TOKEN>
|
|
35
|
+
qwen-alpha --token $BOT_TOKEN
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## π ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
|
|
41
|
+
|
|
42
|
+
### ΠΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
|
|
43
|
+
|
|
44
|
+
| Π€ΡΠ½ΠΊΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|
|
45
|
+
|---------|----------|
|
|
46
|
+
| **Code Review** | ΠΠ½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΈΡΠΊ Π±Π°Π³ΠΎΠ² ΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ |
|
|
47
|
+
| **ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π°** | Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ |
|
|
48
|
+
| **ΠΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°** | ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΡΠ°ΡΡΠΊΠΎΠ² |
|
|
49
|
+
| **Π Π΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³** | Π£Π»ΡΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ |
|
|
50
|
+
| **Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ** | ΠΠ½Π°Π»ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΊΠΎΠ΄ΠΎΠΌ (Π΄ΠΎ 2MB) |
|
|
51
|
+
| **ΠΠΎΠ½ΡΠ΅ΠΊΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³Π°** | ΠΠΎΡ ΠΏΠΎΠΌΠ½ΠΈΡ ΠΈΡΡΠΎΡΠΈΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ |
|
|
52
|
+
|
|
53
|
+
### ΠΠΎΠΌΠ°Π½Π΄Ρ Π±ΠΎΡΠ°
|
|
54
|
+
|
|
55
|
+
| ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|
|
56
|
+
|---------|----------|
|
|
57
|
+
| `/start` | ΠΠ°ΠΏΡΡΠΊ Π±ΠΎΡΠ° ΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ |
|
|
58
|
+
| `/help` | Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ |
|
|
59
|
+
| `/reset` | Π‘Π±ΡΠΎΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ΅ΡΡΠΈΠΈ |
|
|
60
|
+
| `/stats` | Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ |
|
|
61
|
+
| `/settings` | ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ Π±ΠΎΡΠ° |
|
|
62
|
+
| `/admin` | ΠΠ°Π½Π΅Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° |
|
|
63
|
+
|
|
64
|
+
### ΠΠ»Ρ Π³ΡΡΠΏΠΏΠΎΠ²ΡΡ
ΡΠ°ΡΠΎΠ²
|
|
65
|
+
|
|
66
|
+
- **ΠΠ°ΡΠ°Π»ΠΎ ΡΠ΅ΡΡΠΈΠΈ**: `/qwen <Π·Π°ΠΏΡΠΎΡ>` ΠΈΠ»ΠΈ `@QwenAlphaRobot <Π·Π°ΠΏΡΠΎΡ>`
|
|
67
|
+
- **ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅**: ΠΎΡΠ²Π΅Ρ (reply) Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ΅ΡΡΠΈΠΈ
|
|
68
|
+
- **ΠΠΎΠ½ΡΠ΅ΠΊΡΡ**: Π±ΠΎΡ ΠΏΠΎΠΌΠ½ΠΈΡ Π²ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ
|
|
69
|
+
- **ΠΠ·ΠΎΠ»ΡΡΠΈΡ**: ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠ΅ΠΌΠ° β ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΠ΅ΡΡΠΈΡ
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## βοΈ ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
|
|
74
|
+
|
|
75
|
+
### CLI ΠΎΠΏΡΠΈΠΈ
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
qwen-alpha --token <TOKEN> [ΠΎΠΏΡΠΈΠΈ]
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
| ΠΠΏΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ |
|
|
82
|
+
|-------|----------|--------------|
|
|
83
|
+
| `--token <TOKEN>` | Telegram Bot API ΡΠΎΠΊΠ΅Π½ | **ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ** |
|
|
84
|
+
| `--log-level <LEVEL>` | Π£ΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ | `info` |
|
|
85
|
+
| `--allowed-users <IDS>` | Whitelist user_id | Π²ΡΠ΅ |
|
|
86
|
+
| `--init-only` | Π’ΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡ | `false` |
|
|
87
|
+
|
|
88
|
+
### ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# .env ΡΠ°ΠΉΠ» (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
|
|
92
|
+
BOT_TOKEN=your_bot_token_here
|
|
93
|
+
LOG_LEVEL=info
|
|
94
|
+
ALLOWED_USERS=123456789,987654321
|
|
95
|
+
QWEN_TIMEOUT=60000
|
|
96
|
+
RATE_LIMIT_WINDOW=60000
|
|
97
|
+
RATE_LIMIT_MAX=10
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## π Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
|
|
103
|
+
|
|
104
|
+
ΠΠ°Π½Π½ΡΠ΅ Ρ
ΡΠ°Π½ΡΡΡΡ Π² `~/.qwen-alpha/`:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
~/.qwen-alpha/
|
|
108
|
+
βββ db/
|
|
109
|
+
β βββ users.json # ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ
|
|
110
|
+
β βββ sessions.json # Π‘Π΅ΡΡΠΈΠΈ (24Ρ)
|
|
111
|
+
β βββ admins.json # ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ
|
|
112
|
+
β βββ stats.json # Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ°
|
|
113
|
+
βββ logs/
|
|
114
|
+
β βββ qwen-alpha-YYYY-MM-DD.log
|
|
115
|
+
βββ config/
|
|
116
|
+
βββ settings.json # ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ Π±ΠΎΡΠ°
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**ΠΠ°ΠΆΠ½ΠΎ**: ΠΠ°Π½Π½ΡΠ΅ Π½Π΅ Ρ
ΡΠ°Π½ΡΡΡΡ Π² node_modules ΠΈ Π½Π΅ Π·Π°ΡΠΈΡΠ°ΡΡΡΡ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## π‘ ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
|
|
124
|
+
|
|
125
|
+
### ΠΠ΅ΡΠ²ΡΠΉ Π·Π°ΠΏΡΡΠΊ
|
|
126
|
+
|
|
127
|
+
ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π·Π°ΠΏΡΡΡΠΈΠ²ΡΠΈΠΉ `/start`, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ **ΡΡΠΏΠ΅Ρ-Π°Π΄ΠΌΠΈΠ½ΠΎΠΌ**.
|
|
128
|
+
|
|
129
|
+
### ΠΠ΄ΠΌΠΈΠ½ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π°Π΄ΠΌΠΈΠ½Π°ΠΌΠΈ
|
|
133
|
+
/admin add <user_id> # ΠΠΎΠ±Π°Π²ΠΈΡΡ Π°Π΄ΠΌΠΈΠ½Π°
|
|
134
|
+
/admin remove <user_id> # Π£Π΄Π°Π»ΠΈΡΡ Π°Π΄ΠΌΠΈΠ½Π°
|
|
135
|
+
|
|
136
|
+
# Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ
|
|
137
|
+
/admin ban <user_id> # ΠΠ°Π±Π°Π½ΠΈΡΡ
|
|
138
|
+
/admin unban <user_id> # Π Π°Π·Π±Π°Π½ΠΈΡΡ
|
|
139
|
+
|
|
140
|
+
# Π‘Π΅ΡΡΠΈΠΈ
|
|
141
|
+
/admin sessions list # Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ΅ΡΡΠΈΠΉ
|
|
142
|
+
/admin sessions clear <chat_id> # ΠΡΠΈΡΡΠΈΡΡ ΡΠ°Ρ
|
|
143
|
+
|
|
144
|
+
# ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ
|
|
145
|
+
/admin set <key> <value> # ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ
|
|
146
|
+
/admin settings # ΠΠΎΠΊΠ°Π·Π°ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
|
|
147
|
+
|
|
148
|
+
# Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ°
|
|
149
|
+
/admin stats # ΠΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ Π±ΠΎΡΠ°
|
|
153
|
+
|
|
154
|
+
| ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° | ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|
|
155
|
+
|-----------|--------------|----------|
|
|
156
|
+
| `session_timeout_hours` | 24 | Π‘ΡΠΎΠΊ ΠΆΠΈΠ·Π½ΠΈ ΡΠ΅ΡΡΠΈΠΈ (ΡΠ°ΡΡ) |
|
|
157
|
+
| `max_file_size_mb` | 2 | ΠΠ°ΠΊΡ. ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° (MB) |
|
|
158
|
+
| `requests_per_user_per_hour` | 60 | ΠΠΈΠΌΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²/ΡΠ°Ρ |
|
|
159
|
+
| `group_mode` | mention | Π Π΅ΠΆΠΈΠΌ Π² Π³ΡΡΠΏΠΏΠ°Ρ
|
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## π§ Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
|
|
164
|
+
|
|
165
|
+
### Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
git clone https://github.com/JeBance/QwenAlpha.git
|
|
169
|
+
cd QwenAlpha
|
|
170
|
+
npm install
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### ΠΠ°ΠΏΡΡΠΊ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
npm start -- --token <YOUR_BOT_TOKEN>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Π’Π΅ΡΡΡ
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
npm test
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### ΠΠΈΠ½ΡΠΈΠ½Π³ ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
npm run lint
|
|
189
|
+
npm run format
|
|
190
|
+
npm run format:check
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## π Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
QwenAlpha/
|
|
199
|
+
βββ bin/
|
|
200
|
+
β βββ qwen-alpha.js # CLI entry point
|
|
201
|
+
βββ src/
|
|
202
|
+
β βββ index.js # ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΊΡΠΏΠΎΡΡ
|
|
203
|
+
β βββ bot/
|
|
204
|
+
β β βββ bot.js # Telegraf ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
|
|
205
|
+
β β βββ handlers/ # ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄
|
|
206
|
+
β β βββ middleware/ # Middleware
|
|
207
|
+
β βββ services/
|
|
208
|
+
β β βββ db/ # JSON Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅
|
|
209
|
+
β β βββ qwenService.js # Qwen Code ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ
|
|
210
|
+
β βββ config/ # ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
|
|
211
|
+
β βββ utils/ # Π£ΡΠΈΠ»ΠΈΡΡ
|
|
212
|
+
βββ tests/ # Π’Π΅ΡΡΡ
|
|
213
|
+
βββ .github/workflows/ # CI/CD
|
|
214
|
+
βββ package.json
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## π Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ
|
|
220
|
+
|
|
221
|
+
### Qwen Code Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
npm install -g @qwen-code/qwen-code
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### ΠΡΠΈΠ±ΠΊΠ° "Bot token not specified"
|
|
228
|
+
|
|
229
|
+
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ `--token` ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ `BOT_TOKEN`:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
export BOT_TOKEN=123456789:ABCdef...
|
|
233
|
+
qwen-alpha --token $BOT_TOKEN
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### ΠΡΠΈΠ±ΠΊΠ° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΡ
|
|
237
|
+
|
|
238
|
+
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΡΠ°Π²Π° Π½Π° Π·Π°ΠΏΠΈΡΡ Π² `~/.qwen-alpha/`:
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
chmod -R 755 ~/.qwen-alpha/
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### ΠΠΎΡ Π½Π΅ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π² Π³ΡΡΠΏΠΏΠ°Ρ
|
|
245
|
+
|
|
246
|
+
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ Π±ΠΎΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Π³ΡΡΠΏΠΏΡ ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ°Π²Π° Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## π ΠΠΈΡΠ΅Π½Π·ΠΈΡ
|
|
251
|
+
|
|
252
|
+
[MIT License](LICENSE)
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## π Π‘ΡΡΠ»ΠΊΠΈ
|
|
257
|
+
|
|
258
|
+
- **Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ**: https://github.com/JeBance/QwenAlpha
|
|
259
|
+
- **NPM**: https://www.npmjs.com/package/qwen-alpha
|
|
260
|
+
- **Qwen Code**: https://github.com/QwenLM/qwen-code
|
|
261
|
+
- **Telegraf**: https://telegraf.js.org/
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## π€ ΠΠΊΠ»Π°Π΄ Π² ΠΏΡΠΎΠ΅ΠΊΡ
|
|
266
|
+
|
|
267
|
+
1. Fork ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
|
|
268
|
+
2. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²Π΅ΡΠΊΡ (`git checkout -b feature/amazing-feature`)
|
|
269
|
+
3. ΠΠ°ΠΊΠΎΠΌΠΌΠΈΡΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ (`git commit -m 'Add amazing feature'`)
|
|
270
|
+
4. ΠΡΠΏΡΠ°Π²ΡΡΠ΅ Π² remote (`git push origin feature/amazing-feature`)
|
|
271
|
+
5. ΠΡΠΊΡΠΎΠΉΡΠ΅ Pull Request
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## π ΠΠΎΠ½ΡΠ°ΠΊΡΡ
|
|
276
|
+
|
|
277
|
+
- **Telegram**: @QwenAlphaRobot (Π±ΠΎΡ)
|
|
278
|
+
- **GitHub**: https://github.com/JeBance/QwenAlpha/issues
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
**Qwen Alpha** β Π²Π°Ρ AI Π°ΡΡΠΈΡΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π² Telegram! π
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { Command } = require('commander');
|
|
4
|
+
const packageJson = require('../package.json');
|
|
5
|
+
const { startBot } = require('../src');
|
|
6
|
+
const { logger } = require('../src/utils/logger');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* ΠΠ°ΡΡΠΈΠ½Π³ ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ
|
|
10
|
+
* @param {string} value - Π‘ΡΡΠΎΠΊΠ° Π²ΠΈΠ΄Π° "123456789,987654321"
|
|
11
|
+
* @returns {number[]} ΠΠ°ΡΡΠΈΠ² user_id
|
|
12
|
+
*/
|
|
13
|
+
function parseUserList(value) {
|
|
14
|
+
if (!value) return [];
|
|
15
|
+
return value
|
|
16
|
+
.split(',')
|
|
17
|
+
.map(id => parseInt(id.trim(), 10))
|
|
18
|
+
.filter(id => !isNaN(id));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const program = new Command();
|
|
22
|
+
|
|
23
|
+
program
|
|
24
|
+
.name('qwen-alpha')
|
|
25
|
+
.description('Telegram Π±ΠΎΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Qwen Code β AI-powered code review ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π°')
|
|
26
|
+
.version(packageJson.version);
|
|
27
|
+
|
|
28
|
+
program
|
|
29
|
+
.requiredOption('--token <TOKEN>', 'Telegram Bot API ΡΠΎΠΊΠ΅Π½ (ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Ρ @BotFather)')
|
|
30
|
+
.option('--log-level <LEVEL>', 'Π£ΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (debug, info, warn, error)', 'info')
|
|
31
|
+
.option('--allowed-users <USERS>', 'Whitelist user_id ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)', '')
|
|
32
|
+
.option('--init-only', 'Π’ΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡ ΠΈ Π²ΡΡ
ΠΎΠ΄', false)
|
|
33
|
+
.addHelpText('after', `
|
|
34
|
+
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
|
|
35
|
+
$ qwen-alpha --token 123456789:ABCdefGHIjklMNOpqrsTUVwxyz
|
|
36
|
+
$ qwen-alpha --token <TOKEN> --log-level debug
|
|
37
|
+
$ qwen-alpha --token <TOKEN> --allowed-users 123456789,987654321
|
|
38
|
+
|
|
39
|
+
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: https://github.com/JeBance/QwenAlpha
|
|
40
|
+
`);
|
|
41
|
+
|
|
42
|
+
program.parse(process.argv);
|
|
43
|
+
|
|
44
|
+
const options = program.opts();
|
|
45
|
+
|
|
46
|
+
async function main() {
|
|
47
|
+
try {
|
|
48
|
+
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡ
|
|
49
|
+
const { initDirectories } = require('../src/utils/paths');
|
|
50
|
+
const { storeManager } = require('../src/services/db');
|
|
51
|
+
|
|
52
|
+
initDirectories();
|
|
53
|
+
storeManager.init();
|
|
54
|
+
|
|
55
|
+
// ΠΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
|
|
56
|
+
if (options.initOnly) {
|
|
57
|
+
console.log('β
Qwen Alpha Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ');
|
|
58
|
+
console.log(`π ΠΠ°Π½Π½ΡΠ΅ Ρ
ΡΠ°Π½ΡΡΡΡ Π²: ~/.qwen-alpha/`);
|
|
59
|
+
process.exit(0);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ ΡΠΎΠΊΠ΅Π½Π°
|
|
63
|
+
if (!options.token || options.token === '<TOKEN>') {
|
|
64
|
+
console.error('β ΠΡΠΈΠ±ΠΊΠ°: Telegram Bot API ΡΠΎΠΊΠ΅Π½ Π½Π΅ ΡΠΊΠ°Π·Π°Π½');
|
|
65
|
+
console.error('');
|
|
66
|
+
console.error('ΠΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠΊΠ΅Π½ Ρ @BotFather ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅:');
|
|
67
|
+
console.error(' qwen-alpha --token <YOUR_BOT_TOKEN>');
|
|
68
|
+
console.error('');
|
|
69
|
+
console.error('ΠΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ:');
|
|
70
|
+
console.error(' export BOT_TOKEN=<YOUR_BOT_TOKEN>');
|
|
71
|
+
console.error(' qwen-alpha --token $BOT_TOKEN');
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΎΠΏΡΠΈΠΉ Π΄Π»Ρ startBot
|
|
76
|
+
const botOptions = {
|
|
77
|
+
token: options.token,
|
|
78
|
+
logLevel: options.logLevel,
|
|
79
|
+
allowedUsers: parseUserList(options.allowedUsers),
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
// ΠΠ°ΠΏΡΡΠΊ Π±ΠΎΡΠ°
|
|
83
|
+
await startBot(botOptions);
|
|
84
|
+
|
|
85
|
+
console.log('β
Qwen Alpha Π·Π°ΠΏΡΡΠ΅Π½');
|
|
86
|
+
console.log(' ΠΠ°ΠΆΠΌΠΈΡΠ΅ Ctrl+C Π΄Π»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ');
|
|
87
|
+
|
|
88
|
+
} catch (error) {
|
|
89
|
+
logger.error({ error }, 'Failed to start Qwen Alpha');
|
|
90
|
+
console.error('β ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅:', error.message);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
main();
|