Ваша ошибка в этой команде:
exec /usr/bin/curl -u :pass -X POST https://localhost:55477/raw -d '{"command": "site search $name", "sites": ["$ftp"]}' --insecure
Проблема в том, что вы скопировали некоторый код откуда-то, предназначенный для сценариев оболочки, и Tcl не обрабатывает '
так же , (На самом деле это совершенно необычный символ в Tcl.) Вместо этого вам нужно составить JSON немного по-другому:
exec /usr/bin/curl -u :pass -X POST https://localhost:55477/raw -d "{\"command\": \"site search $name\", \"sites\": \[\"$ftp\"\]}" --insecure
Это не слишком понятно для чтения. Здесь, давайте разберем его немного подробнее:
# These can be set outside the [catch]
set Url https://localhost:55477/raw
set Json "{\"command\": \"site search $name\", \"sites\": \[\"$ftp\"\]}"
exec /usr/bin/curl -u :pass -X POST $Url -d $Json --insecure
Есть несколько библиотек Tcl, которые можно использовать для построения этого запроса JSON (и вам, вероятно, следует позаботиться о том, чтобы параметры, которые вы вставляете в он не содержит «плохих» символов, таких как "
), но он более важен для анализа результата JSON. Простая библиотека синтаксического анализатора находится в Tcllib; это задокументировано здесь . Для этого, предполагая, что вы установили Tcllib, вы добавляете в начало своего скрипта:
package require json
Затем вы можете анализировать результаты и записывать их в канал с помощью чего-то вроде:
set results [exec /usr/bin/curl -u :pass -X POST $Url -d $Json --insecure]
foreach info [dict get [json::json2dict $results] successes] {
foreach line [split [dict get $info result] "\n"] {
if {[string match "200-*" $line]} {
set line [string trim [string range $line 4 end]]
putnow "PRIVMSG #test :$line"
}
}
}
Возможно, вам понадобится немного больше работы, чтобы просто получить нужные строки.