| 159 | const fields = interval.trim().split(/\s+/); |
| 160 | console.log(`[sum] 字段数量: ${fields.length}, 字段: ${JSON.stringify(fields)}`); |
| 161 | |
| 162 | // 2. 如果是 6 字段,直接返回(参考 sendat,不验证,让 cronManager 处理) |
| 163 | if (fields.length === 6) { |
| 164 | console.log(`[sum] 返回 6 字段 cron: "${interval}"`); |
| 165 | return interval; |
| 166 | } |
| 167 | |
| 168 | // 3. 如果是 5 字段,补 0(秒) |
| 169 | if (fields.length === 5) { |
| 170 | const result = `0 ${interval}`; |
| 171 | console.log(`[sum] 5 字段转 6 字段: "${result}"`); |
| 172 | return result; |
| 173 | } |
| 174 | |
| 175 | // 4. 尝试解析简化格式 |
| 176 | const match = interval.match(/^(\d+)(h|m)$/i); |
| 177 | if (!match) { |
| 178 | console.log(`[sum] 无法解析简化格式,返回 null`); |
| 179 | return null; |
| 180 | } |
| 181 | |
| 182 | const value = parseInt(match[1]); |
| 183 | const unit = match[2].toLowerCase(); |
| 184 | |
| 185 | if (unit === 'h') { |
| 186 | const result = `0 0 */${value} * * *`; |
| 187 | console.log(`[sum] 简化格式(小时): "${result}"`); |
| 188 | return result; |
| 189 | } else if (unit === 'm') { |
| 190 | const result = `0 */${value} * * * *`; |
| 191 | console.log(`[sum] 简化格式(分钟): "${result}"`); |
| 192 | return result; |
| 193 | } |
| 194 | |
| 195 | console.log(`[sum] 未知情况,返回 null`); |
| 196 | return null; |
| 197 | } |
| 198 | |
| 199 | function parseChatIdentifier(input: string): string { |
| 200 | // 1. 如果是纯数字或负数ID,直接返回 |
| 201 | if (/^-?\d+$/.test(input)) { |
| 202 | return input; |
| 203 | } |
| 204 | |
| 205 | // 2. 处理私有邀请链接 https://t.me/+xxxxx 或 https://t.me/joinchat/xxxxx |
| 206 | // 这种格式需要特殊处理,保留完整链接 |