COCO研究院

 找回密碼
 註冊
搜索
查看: 43876|回復: 19

[教學] 下單後發訊息到手機Telegram教學

[複製鏈接]
發表於 16-8-15 21:12 | 顯示全部樓層 |閱讀模式
購買主題 已有 115 人購買  本主題需向作者支付 1 金錢 才能瀏覽
發表於 18-3-25 16:50 | 顯示全部樓層
謝謝分享下單後發訊息到手機Telegram~
回復 支持 1 反對 0

使用道具 舉報

 樓主| 發表於 16-8-17 21:55 | 顯示全部樓層
lwhuang 發表於 16-8-17 13:43
powershell的招數,在我的環境 win10 64裡
同樣的程式碼
AB64會成功

我找到解法了

https://msdn.microsoft.com/en-us ... -windows-powershell

把ShellExecute 的第3個參數設成 %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0 就好了,注意一下,%SystemRoot% 不會自動取代,要寫死,不然就是
  1. //這是x64 windows
  2. EnableScript("JScript");
  3. <%
  4.   WshShell = new ActiveXObject( "WScript.Shell");
  5.   wshEnv = WshShell.Environment("process");
  6.   AFL("AFL") = wshEnv("AFL");
  7.   AFL("SystemRoot") = wshEnv("SystemRoot");
  8. %>
  9. function telegram_ps_x64(msg)//中文 msg ok
  10. {
  11.         fullpath=AFL+"/utility/telegram.ps1";
  12.         ShellExecute("powershell","-file "+fullpath+" ""+msg+""", "",0);
  13. }

  14. function telegram_ps_x86(msg)
  15. {
  16.         pspath=SystemRoot+"/SysWOW64/WindowsPowerShell/v1.0/";
  17.         _TRACE(pspath);
  18.         fullpath=AFL+"/utility/telegram.ps1";
  19.         ShellExecute("powershell","-file "+fullpath+" ""+msg+""", pspath, 0);
  20. }
複製代碼
要用 powershell 只能分2個版本了


評分

參與人數 1金錢 +2 收起 理由
tinyding + 2 感謝分享

查看全部評分

回復 支持 1 反對 0

使用道具 舉報

發表於 16-8-16 11:26 | 顯示全部樓層
本帖最後由 zaqimon 於 16-8-16 11:39 編輯

我目前是使用XMPP的方式送給Hangouts
這樣我在PC或手機都能同時收到訊息
Google目前還沒停止XMPP的後門

我是透過AutoIt去執行sendxmpp32.exe的方式
(sendxmpp原本是perl寫的 我是去找到別人compile好的執行檔)
測試過可以送中文(應該說是UTF-8)沒問題
  1. $pid = Run("sendxmpp32.exe -e -i xxx@gmail.com", "", @SW_HIDE, $STDIN_CHILD)
  2. $re = StdinWrite($pid, StringToBinary($msg & @CRLF, 4))
  3. StdinWrite($pid) ; pipe close
複製代碼

重點是那個StringToBinary轉成UTF-8
我一開始也以為sendxmpp32.exe不支援中文

送中文字我猜會不會是AmiBroker的限制
也許要寫個外部程式轉成UTF-8然後透過STDIN的方式傳送


評分

參與人數 2金錢 +4 收起 理由
lwhuang + 2 原來有sendxmpp可以下載,我以前還傻傻地自.
tinyding + 2 感謝分享

查看全部評分

發表於 16-8-16 12:42 | 顯示全部樓層
測試一下powershell 可以取代 curl 送中文

// 先弄一個script file tel.ps1 (http 空格自己拿掉)
  1. $client = New-Object System.Net.WebClient
  2. $url = "h t t p s://api.telegram.org/bot263669:o8t30XG_mT8oP0GAqg7wwxTqxdH5rIc/sendMessage?chat_id=24881&text="+$args[0]
  3. $reply = $client.DownloadData($url);
複製代碼


執行命令為
  1. powershell -file tel.ps1 "中文"
複製代碼


or in AB
  1. ShellExecute("powershell","-file tel.ps1 "中文"","",0);
複製代碼


ps: powershell 執行script 權限問題要先打開
  1. Set-ExecutionPolicy RemoteSigned
複製代碼

評分

參與人數 3金錢 +5 收起 理由
zaqimon + 1 感謝分享
lwhuang + 2 太強了
tinyding + 2 感謝分享

查看全部評分

 樓主| 發表於 16-8-16 13:54 | 顯示全部樓層
本帖最後由 lwhuang 於 16-8-16 14:22 編輯
magier 發表於 16-8-16 12:42
測試一下powershell 可以取代 curl 送中文

// 先弄一個script file tel.ps1 (http 空格自己拿掉)

powershell這招不能換行耶,要怎麼換行呢?

我查到有 DownloadDataAsync, 但是這個不會成功,有辦法射後不理嗎?
發表於 16-8-16 14:20 | 顯示全部樓層
lwhuang 發表於 16-8-16 13:54
powershell這招不能換行耶,要怎麼換行呢?

沒想過這問題@@稍微改一下script 修正

  1. $client = New-Object System.Net.WebClient;
  2. $txt = "";
  3. foreach($a in $args)
  4. {
  5.   $txt = $txt + "`n" + $a;
  6. }
  7. $txt
  8. $url = "h t t p s://api.telegram.org/bot26:qg7wwxTqxdH5rIc/sendMessage?chat_id=1441&text="+$txt
  9. $url
  10. $reply = $client.DownloadData($url);
複製代碼
執行變成

  1. powershell -file tel.ps1 第一行  第二行  第三行
複製代碼


評分

參與人數 1金錢 +2 收起 理由
lwhuang + 2 太強了

查看全部評分

 樓主| 發表於 16-8-16 14:27 | 顯示全部樓層
本帖最後由 lwhuang 於 16-8-16 14:30 編輯
magier 發表於 16-8-16 14:20
沒想過這問題@@稍微改一下script 修正

執行變成

好像有點小醜,因為我都不知道會有幾行,希望是一行msg就出去了
curl 的換行是用 --data-urlencode 傳的,看到\n就會換行,全放在網址就不行,會不會有不同的包裝方式?POST?

另外我去試了 DownloadDataAsync ,是不行的,有沒有辦法射後不理?

發表於 16-8-16 15:20 | 顯示全部樓層
lwhuang 發表於 16-8-16 14:27
好像有點小醜,因為我都不知道會有幾行,希望是一行msg就出去了
curl 的換行是用 --data-urlencode 傳的, ...

找到一個簡單的方法
單一參數  使用\n  script 內部再轉換就可以了
  1. $client = New-Object System.Net.WebClient;
  2. $txt = $args[0].Replace("\n", "`n")

  3. $url = "h t t p s://api.telegram.org/bot26369:AAHSwwxTqxdH5rIc/sendMessage?chat_id=2441&text="+$txt
  4. $url
  5. $reply = $client.DownloadData($url);
複製代碼
  1. powershell -file tel.ps1 "123\n123"
複製代碼

另DownloadDataAsync 使用這個的需求是?

評分

參與人數 1金錢 +2 收起 理由
lwhuang + 2 太強了

查看全部評分

 樓主| 發表於 16-8-16 17:48 | 顯示全部樓層
本帖最後由 lwhuang 於 16-8-16 17:52 編輯
magier 發表於 16-8-16 15:20
找到一個簡單的方法
單一參數  使用\n  script 內部再轉換就可以了

Async就是希望不要等他做完,就繼續下面的事了,不管他有沒有做完,也不管他有沒有成功,以免網路還是什麼有問題被卡住,他自己努力做而不影響呼叫他的上層,怕本來只是通知的,結果下一筆單被卡住就不好了
發表於 16-8-16 18:22 | 顯示全部樓層
本帖最後由 magier 於 16-8-16 19:49 編輯
lwhuang 發表於 16-8-16 17:48
Async就是希望不要等他做完,就繼續下面的事了,不管他有沒有做完,也不管他有沒有成功,以免網路還是什麼 ...

看起來Async的呼叫只能確保在powershell裡面不會被 block 離開AB ShellExecute() 還是要等做完  不然好像訊息會傳不出去

應該還是使用同步的方式就好了

評分

參與人數 1金錢 +2 收起 理由
lwhuang + 2 感謝分享

查看全部評分

發表於 16-8-17 10:08 | 顯示全部樓層
ShellExecute並不會block
例如你可以連續執行兩行
ShellExecute("ping","-n 10 127.0.0.1","");
ShellExecute("ping","-n 10 127.0.0.1","");
會跳出兩個視窗

評分

參與人數 1金錢 +2 收起 理由
lwhuang + 2 感謝分享

查看全部評分

 樓主| 發表於 16-8-17 13:43 | 顯示全部樓層
本帖最後由 lwhuang 於 16-8-17 13:46 編輯
magier 發表於 16-8-16 15:20
找到一個簡單的方法
單一參數  使用\n  script 內部再轉換就可以了

powershell的招數,在我的環境 win10 64裡
同樣的程式碼
AB64會成功
AB32會失敗,碰巧我的程式交易只能在32跑



發表於 16-8-17 20:46 | 顯示全部樓層
lwhuang 發表於 16-8-17 13:43
powershell的招數,在我的環境 win10 64裡
同樣的程式碼
AB64會成功

手邊沒有win10 可以測試
我的環境是win7 32bit + AB 32 bit
 樓主| 發表於 16-8-17 21:00 | 顯示全部樓層
magier 發表於 16-8-17 20:46
手邊沒有win10 可以測試
我的環境是win7 32bit + AB 32 bit

我猜不是win10的關係,是 32-bit AB 配不了 64-bit powershell

 樓主| 發表於 16-8-17 21:23 | 顯示全部樓層
又練到一招,可以用bot在群組發訊,適合吸收會員的大咖使用,傳到群組裡,所有會員都會看到,不用傳很多次
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-22 05:27

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |