Telegram Bot Api библиотека для MASM32

Тема в разделе "WASM.PROJECTS", создана пользователем dsx, 20 янв 2024.

  1. dsx

    dsx New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2024
    Сообщения:
    3
    Небольшая библиотека, всего две функции для отправки фото или текста в чат или канал. Библиотека была рабочей в 2016г, сейчас не проверял.
    Код (Text):
    1.  
    2. ; 06.05.2016
    3. ;**********************************************************************************************************************************************************
    4. include \masm32\include\masm32rt.inc
    5. include \masm32\include\wininet.inc
    6. includelib \masm32\lib\wininet.lib
    7. include \masm32\include\urlmon.inc
    8. includelib \masm32\lib\urlmon.lib
    9. TelegramSendPhoto           proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
    10. TelegramSendMessage         proto :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
    11. TelegramSendPhoto_thread    proto :DWORD
    12. TelegramSendMessage_thread  proto :DWORD
    13. UnicodeToUTF8               proto :DWORD
    14. Set_hWnd                    proto :DWORD
    15. ;macro
    16.     xparam MACRO n_const, ident
    17.         mov ebx, ident
    18.         mov ecx, n_const
    19.         shl ecx, 16
    20.         or ecx, ebx
    21.         EXITM <ecx>
    22.     ENDM
    23. .data
    24.     align 4
    25.     szContentHeader         db "Content-Type: multipart/form-data",03bh," boundary=----------E1jIDWEkDVeOLS0pj8Qh5U",0
    26.     align 4
    27.     szFormChatID            db "------------E1jIDWEkDVeOLS0pj8Qh5U",13,10
    28.                             db "Content-Disposition: form-data",03bh," name=",022h,"chat_id",022h,13,10,13,10
    29.                             db "%s",13,10,0
    30.     align 4
    31.     szFormCaption           db "------------E1jIDWEkDVeOLS0pj8Qh5U",13,10
    32.                             db "Content-Disposition: form-data",03bh," name=",022h,"caption",022h,13,10,13,10,0     ;+caption+13,10
    33.     align 4
    34.     szFormText              db "------------E1jIDWEkDVeOLS0pj8Qh5U",13,10
    35.                             db "Content-Disposition: form-data",03bh," name=",022h,"parse_mode",022h,13,10,13,10
    36.                             db "html",13,10
    37.     szFormTex2              db "------------E1jIDWEkDVeOLS0pj8Qh5U",13,10
    38.                             db "Content-Disposition: form-data",03bh," name=",022h,"text",022h,13,10,13,10,0     ;+text+13,10
    39.     align 4
    40.     szFormPhoto             db "------------E1jIDWEkDVeOLS0pj8Qh5U",13,10
    41.                             db "Content-Disposition: form-data",03bh," name=",022h,"photo",022h,03bh," filename=",022h,"%s",022h,13,10
    42.                             db "Content-Type: image/jpeg",13,10,13,10,0
    43.     align 4
    44.     szFinalBoundary         db 13,10,"------------E1jIDWEkDVeOLS0pj8Qh5U--",13,10,0
    45.     align 4
    46. .data?
    47.     hWindow                 dd ?
    48. .code
    49. ;**********************************************************************************************************************************************************
    50. Set_hWnd proc uses ebx hWnd:DWORD
    51.     mrm hWindow, hWnd
    52. ret
    53. Set_hWnd endp
    54. ;**********************************************************************************************************************************************************
    55. TelegramSendPhoto proc uses ebx szClient:DWORD, szServer:DWORD, szBOT:DWORD, szChatID:DWORD, szMsg:DWORD, szPhoto:DWORD
    56.     invoke VirtualAlloc, 0, 4096, MEM_COMMIT, PAGE_READWRITE
    57.     mov ebx, eax
    58.     mrm dword ptr[ebx+4], szClient
    59.     mrm dword ptr[ebx+8], szServer
    60.     mrm dword ptr[ebx+12], szBOT
    61.     mrm dword ptr[ebx+16], szChatID
    62.     mrm dword ptr[ebx+20], szMsg
    63.     mrm dword ptr[ebx+24], szPhoto
    64.     mrm dword ptr[ebx+28], 0
    65.     invoke CreateThread, 0, 0, addr TelegramSendPhoto_thread, ebx, 0, ebx
    66.     cmp eax, 0
    67.     je @F
    68.     mrm dword ptr[ebx+28], eax
    69.     return 1
    70. @@:
    71. invoke VirtualFree, ebx, 0, MEM_RELEASE
    72. return 0
    73. TelegramSendPhoto endp
    74. ;**********************************************************************************************************************************************************
    75. TelegramSendMessage proc uses ebx szClient:DWORD, szServer:DWORD, szBOT:DWORD, szChatID:DWORD, szMsg:DWORD
    76.     invoke VirtualAlloc, 0, 4096, MEM_COMMIT, PAGE_READWRITE
    77.     mov ebx, eax
    78.     mrm dword ptr[ebx+4], szClient
    79.     mrm dword ptr[ebx+8], szServer
    80.     mrm dword ptr[ebx+12], szBOT
    81.     mrm dword ptr[ebx+16], szChatID
    82.     mrm dword ptr[ebx+20], szMsg
    83.     mrm dword ptr[ebx+24], 0;no use
    84.     mrm dword ptr[ebx+28], 0
    85.     invoke CreateThread, 0, 0, addr TelegramSendMessage_thread, ebx, 0, ebx
    86.     cmp eax, 0
    87.     je @F
    88.     mrm dword ptr[ebx+28], eax
    89.     return 1
    90. @@:
    91. invoke VirtualFree, ebx, 0, MEM_RELEASE
    92. return 0
    93. TelegramSendMessage endp
    94. ;**********************************************************************************************************************************************************
    95. TelegramSendPhoto_thread proc vMemory:DWORD
    96. LOCAL szClient:DWORD, szServer:DWORD, szBOT:DWORD, szChatID:DWORD, szMsg:DWORD, szPhoto:DWORD
    97. LOCAL hSession:DWORD, hConnect:DWORD, hRequest:DWORD, dwContentLength:DWORD, rzv:DWORD, headSize:DWORD, boundarySize:DWORD
    98. LOCAL dwFileSize:DWORD, hFile:DWORD, pBuf:DWORD, bwr:DWORD, zzxxcc:DWORD, temp_str1:DWORD, temp_str2:DWORD, temp_str3:DWORD, temp_str4:DWORD
    99. LOCAL loc_str[1024]:TCHAR
    100. LOCAL loc_BOT[512]:TCHAR
    101. mov ebx, vMemory
    102. mrm szClient, dword ptr[ebx+4]
    103. mrm szServer, dword ptr[ebx+8]
    104. mrm szBOT, dword ptr[ebx+12]
    105. mrm szChatID, dword ptr[ebx+16]
    106. mrm szMsg, dword ptr[ebx+20]
    107. mrm szPhoto, dword ptr[ebx+24]
    108. invoke lstrcpy, addr loc_BOT, SADD("bot")
    109. invoke lstrcat, addr loc_BOT, szBOT
    110. invoke lstrcat, addr loc_BOT, SADD("/sendPhoto")
    111.     mov zzxxcc, 0
    112.     mov hFile, 0
    113.     mov hSession, 0
    114.     mov hConnect, 0
    115.     mov hRequest, 0
    116.     mov pBuf, 0
    117.    
    118.     add ebx, 128
    119.     mov temp_str4, ebx
    120.     add ebx, 256
    121.     mov temp_str3, ebx
    122.     add ebx, 256
    123.     mov temp_str2, ebx
    124.     add ebx, 512
    125.     mov temp_str1, ebx
    126.     invoke wsprintf, temp_str1, addr szFormChatID, szChatID
    127.     invoke lstrcpy, temp_str2, addr szFormCaption
    128.     invoke wsprintf, temp_str3, addr szFormPhoto, szPhoto
    129.     invoke lstrcpyW, addr loc_str, szMsg
    130.     invoke UnicodeToUTF8, addr loc_str
    131.     invoke lstrlen, temp_str2
    132.     mov ebx, eax
    133.     invoke lstrlen, addr loc_str
    134.     mov ecx, eax
    135.     mov eax, temp_str2
    136.     add eax, ebx
    137.     add ebx, ecx ;summ len
    138.     lea esi, loc_str
    139.     mov edi, eax
    140.     rep movsb
    141.     mov eax, temp_str2
    142.     mov word ptr[eax+ebx], 0a0dh
    143.     add ebx, 2
    144.    
    145.     invoke lstrlen, temp_str1
    146.     mov edx, eax
    147.     mov eax, temp_str1
    148.     add eax, edx
    149.     mov esi, temp_str2
    150.     mov edi, eax
    151.     mov ecx, ebx
    152.     rep movsb
    153.     add ebx, edx
    154.     invoke lstrlen, temp_str3
    155.     mov edx, eax
    156.     mov eax, temp_str1
    157.     add eax, ebx
    158.     mov esi, temp_str3
    159.     mov edi, eax
    160.     mov ecx, edx
    161.     rep movsb
    162.     add ebx, edx
    163.     mov headSize, ebx
    164.    
    165.     invoke lstrlen, addr szFinalBoundary
    166.     mov boundarySize, eax
    167. ;------------------------------------------------------------------------------------------------------------------------------
    168.     invoke CreateFile, szPhoto, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0
    169.     cmp eax, INVALID_HANDLE_VALUE
    170.     je @F
    171.     mov hFile, eax
    172.     invoke GetFileSize, hFile, 0
    173.     mov dwFileSize, eax
    174.    
    175.     mov ebx, headSize
    176.     add ebx, boundarySize
    177.     add ebx, dwFileSize
    178.     mov dwContentLength, ebx
    179.     add ebx, 2048
    180.     invoke VirtualAlloc, 0, ebx, MEM_COMMIT, PAGE_READWRITE
    181.     mov pBuf, eax
    182.     mov esi, temp_str1
    183.     mov edi, pBuf
    184.     mov ecx, headSize
    185.     rep movsb
    186.     mov ebx, headSize
    187.     mov edx, pBuf
    188.     add edx, ebx
    189.     invoke ReadFile, hFile, edx, dwFileSize, addr rzv, 0
    190.     add ebx, dwFileSize
    191.     lea esi, szFinalBoundary
    192.     mov edi, pBuf
    193.     add edi, ebx
    194.     mov ecx, boundarySize
    195.     rep movsb
    196.     invoke CloseHandle, hFile
    197.     mov hFile, 0
    198. ;------------------------------------------------------------------------------------------------------------------------------
    199.     invoke InternetOpen, szClient, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0
    200.     cmp eax, 0
    201.     je @F
    202.     mov hSession, eax
    203.     invoke InternetConnect, hSession, szServer, INTERNET_DEFAULT_HTTPS_PORT, 0, 0, INTERNET_SERVICE_HTTP, 0, 0
    204.     cmp eax, 0
    205.     je @F
    206.     mov hConnect, eax
    207.     invoke HttpOpenRequest, hConnect, SADD("POST"), addr loc_BOT, 0, 0, 0, INTERNET_FLAG_NO_UI or INTERNET_FLAG_SECURE or INTERNET_FLAG_IGNORE_CERT_CN_INVALID or INTERNET_FLAG_IGNORE_CERT_DATE_INVALID, 0
    208.     cmp eax, 0
    209.     je @F
    210.     mov hRequest, eax
    211.     invoke HttpAddRequestHeaders, hRequest, addr szContentHeader, -1, HTTP_ADDREQ_FLAG_ADD
    212.     cmp eax, 0
    213.     je @F
    214.     invoke wsprintf, temp_str4, SADD("Content-Length: %d"), dwContentLength
    215.     invoke HttpSendRequest, hRequest, temp_str4, -1, pBuf, dwContentLength
    216.     cmp eax, 0
    217.     je @F
    218.    ;invoke InternetReadFile, hRequest, temp_str4, 200, addr bwr
    219.    ;cmp eax, 0
    220.    ;je @F
    221.    ;invoke MessageBox, hWindow, temp_str4, 0, MB_OK
    222.     mov zzxxcc, 1
    223. @@:
    224.     cmp pBuf, 0
    225.     je @F
    226.     invoke VirtualFree, pBuf, 0, MEM_RELEASE
    227.     @@:
    228.     cmp hRequest, 0
    229.     je @F
    230.     invoke InternetCloseHandle, hRequest
    231.     @@:
    232.     cmp hConnect, 0
    233.     je @F
    234.     invoke InternetCloseHandle, hConnect
    235.     @@:
    236.     cmp hSession, 0
    237.     je @F
    238.     invoke InternetCloseHandle, hSession
    239.     @@:
    240.     cmp hFile, 0
    241.     je @F
    242.     invoke CloseHandle, hFile
    243.     @@:
    244. ;**************************************************
    245.     mov ebx, vMemory
    246.     @@:
    247.     invoke Sleep, 1
    248.     cmp dword ptr[ebx+28], 0
    249.     je @B
    250.     mov edx, dword ptr[ebx+28]
    251.     invoke CloseHandle, edx
    252.     invoke VirtualFree, vMemory, 0, MEM_RELEASE
    253. ;**************************************************
    254.     cmp zzxxcc, 0
    255.     je @F
    256.     return 1
    257. @@:
    258. invoke PostMessage, hWindow, WM_COMMAND, xparam(BN_CLICKED, 2202), 0
    259. return 0 ;error
    260. TelegramSendPhoto_thread endp
    261. ;########################################################################################################################################################
    262. ;########################################################################################################################################################
    263. TelegramSendMessage_thread proc vMemory:DWORD
    264. LOCAL szClient:DWORD, szServer:DWORD, szBOT:DWORD, szChatID:DWORD, szMsg:DWORD
    265. LOCAL hSession:DWORD, hConnect:DWORD, hRequest:DWORD, headSize:DWORD
    266. LOCAL bwr:DWORD, zzxxcc:DWORD, temp_str1:DWORD, temp_str2:DWORD, temp_str3:DWORD, temp_str4:DWORD
    267. LOCAL loc_str[1024]:TCHAR
    268. LOCAL loc_BOT[512]:TCHAR
    269. mov ebx, vMemory
    270. mrm szClient, dword ptr[ebx+4]
    271. mrm szServer, dword ptr[ebx+8]
    272. mrm szBOT, dword ptr[ebx+12]
    273. mrm szChatID, dword ptr[ebx+16]
    274. mrm szMsg, dword ptr[ebx+20]
    275. invoke lstrcpy, addr loc_BOT, SADD("bot")
    276. invoke lstrcat, addr loc_BOT, szBOT
    277. invoke lstrcat, addr loc_BOT, SADD("/sendMessage")
    278.     mov zzxxcc, 0
    279.     mov hSession, 0
    280.     mov hConnect, 0
    281.     mov hRequest, 0
    282.    
    283.     add ebx, 128
    284.     mov temp_str4, ebx
    285.     add ebx, 256
    286.     mov temp_str3, ebx
    287.     add ebx, 256
    288.     mov temp_str2, ebx
    289.     add ebx, 1280
    290.     mov temp_str1, ebx
    291.     invoke wsprintf, temp_str1, addr szFormChatID, szChatID
    292.     invoke lstrcpy, temp_str2, addr szFormText
    293.     invoke lstrcpyW, addr loc_str, szMsg
    294.     invoke UnicodeToUTF8, addr loc_str
    295.     invoke lstrlen, temp_str2
    296.     mov ebx, eax
    297.     invoke lstrlen, addr loc_str
    298.     mov ecx, eax
    299.     mov eax, temp_str2
    300.     add eax, ebx
    301.     add ebx, ecx ;summ len
    302.     lea esi, loc_str
    303.     mov edi, eax
    304.     rep movsb
    305.     mov eax, temp_str2
    306.     mov word ptr[eax+ebx], 0a0dh
    307.     add ebx, 2
    308.    
    309.     invoke lstrlen, temp_str1
    310.     mov edx, eax
    311.     mov eax, temp_str1
    312.     add eax, edx
    313.     mov esi, temp_str2
    314.     mov edi, eax
    315.     mov ecx, ebx
    316.     rep movsb
    317.     add ebx, edx
    318.    
    319.     invoke lstrlen, addr szFinalBoundary
    320.     lea esi, szFinalBoundary
    321.     mov edi, temp_str1
    322.     add edi, ebx
    323.     mov ecx, eax
    324.     rep movsb
    325.     add ebx, eax
    326.     mov headSize, ebx
    327.    ;invoke MessageBox, hWindow, ustr$(headSize), 0, MB_OK
    328. ;------------------------------------------------------------------------------------------------------------------------------
    329.     invoke InternetOpen, szClient, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0
    330.     cmp eax, 0
    331.     je @F
    332.     mov hSession, eax
    333.     invoke InternetConnect, hSession, szServer, INTERNET_DEFAULT_HTTPS_PORT, 0, 0, INTERNET_SERVICE_HTTP, 0, 0
    334.     cmp eax, 0
    335.     je @F
    336.     mov hConnect, eax
    337.     invoke HttpOpenRequest, hConnect, SADD("POST"), addr loc_BOT, 0, 0, 0, INTERNET_FLAG_NO_UI or INTERNET_FLAG_SECURE or INTERNET_FLAG_IGNORE_CERT_CN_INVALID or INTERNET_FLAG_IGNORE_CERT_DATE_INVALID, 0
    338.     cmp eax, 0
    339.     je @F
    340.     mov hRequest, eax
    341.    
    342.     invoke HttpAddRequestHeaders, hRequest, addr szContentHeader, -1, HTTP_ADDREQ_FLAG_ADD
    343.     cmp eax, 0
    344.     je @F
    345. ;------------------------------
    346.     invoke wsprintf, temp_str4, SADD("Content-Length: %d"), headSize
    347.     invoke HttpSendRequest, hRequest, temp_str4, -1, temp_str1, headSize
    348.     cmp eax, 0
    349.     je @F
    350.    ;invoke InternetReadFile, hRequest, temp_str4, 200, addr bwr
    351.    ;cmp eax, 0
    352.    ;je @F
    353.    ;invoke MessageBox, hWindow, temp_str4, 0, MB_OK
    354.     mov zzxxcc, 1
    355. @@:
    356.     cmp hRequest, 0
    357.     je @F
    358.     invoke InternetCloseHandle, hRequest
    359.     @@:
    360.     cmp hConnect, 0
    361.     je @F
    362.     invoke InternetCloseHandle, hConnect
    363.     @@:
    364.     cmp hSession, 0
    365.     je @F
    366.     invoke InternetCloseHandle, hSession
    367.     @@:
    368. ;**************************************************
    369.     mov ebx, vMemory
    370.     @@:
    371.     invoke Sleep, 1
    372.     cmp dword ptr[ebx+28], 0
    373.     je @B
    374.     mov edx, dword ptr[ebx+28]
    375.     invoke CloseHandle, edx
    376.     invoke VirtualFree, vMemory, 0, MEM_RELEASE
    377. ;**************************************************
    378.     cmp zzxxcc, 0
    379.     je @F
    380.     return 1
    381. @@:
    382. invoke PostMessage, hWindow, WM_COMMAND, xparam(BN_CLICKED, 2202), 0
    383. return 0 ;error
    384. TelegramSendMessage_thread endp
    385. ;**********************************************************************************************************************************************************
    386. UnicodeToUTF8 proc pBuf:DWORD
    387. LOCAL pTempBuf:DWORD, cbTempBuf:DWORD
    388.     xor ecx, ecx
    389.     invoke WideCharToMultiByte, CP_UTF8, ecx, pBuf, -1, ecx, ecx, ecx, ecx                 ;подсчет необходимого количества памяти для UTF8
    390.     test eax, eax
    391.     jz @F
    392.     mov cbTempBuf, eax
    393.     invoke VirtualAlloc, 0, eax, MEM_COMMIT, PAGE_READWRITE
    394.     test eax, eax
    395.     jz @F
    396.     mov pTempBuf, eax
    397.     xor ecx, ecx
    398.     invoke WideCharToMultiByte, CP_UTF8, ecx, pBuf, -1, pTempBuf, cbTempBuf, ecx, ecx      ;перегоняем строчку в UTF8
    399.     invoke lstrcpy, pBuf, pTempBuf                                                         ;копируем результат в исходный буфер
    400.     invoke VirtualFree, pTempBuf, 0, MEM_RELEASE
    401. @@:
    402. ret
    403. UnicodeToUTF8 endp
    404. ;**********************************************************************************************************************************************************
    405. end
    406.  
     

    Вложения:

    comrade нравится это.