-
Notifications
You must be signed in to change notification settings - Fork 5
/
telegram.lua
170 lines (119 loc) · 6.3 KB
/
telegram.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package.cpath=package.cpath..";.\\?.dll;.\\?51.dll;C:\\Program Files (x86)\\Lua\\5.1\\?.dll;C:\\Program Files (x86)\\Lua\\5.1\\?51.dll;C:\\Program Files (x86)\\Lua\\5.1\\clibs\\?.dll;C:\\Program Files (x86)\\Lua\\5.1\\clibs\\?51.dll;C:\\Program Files (x86)\\Lua\\5.1\\loadall.dll;C:\\Program Files (x86)\\Lua\\5.1\\clibs\\loadall.dll;C:\\Program Files\\Lua\\5.1\\?.dll;C:\\Program Files\\Lua\\5.1\\?51.dll;C:\\Program Files\\Lua\\5.1\\clibs\\?.dll;C:\\Program Files\\Lua\\5.1\\clibs\\?51.dll;C:\\Program Files\\Lua\\5.1\\loadall.dll;C:\\Program Files\\Lua\\5.1\\clibs\\loadall.dll"
package.path=package.path..";.\\?.lua;C:\\Program Files (x86)\\Lua\\5.1\\lua\\?.lua;C:\\Program Files (x86)\\Lua\\5.1\\lua\\?\\init.lua;C:\\Program Files (x86)\\Lua\\5.1\\?.lua;C:\\Program Files (x86)\\Lua\\5.1\\?\\init.lua;C:\\Program Files (x86)\\Lua\\5.1\\lua\\?.luac;C:\\Program Files\\Lua\\5.1\\lua\\?.lua;C:\\Program Files\\Lua\\5.1\\lua\\?\\init.lua;C:\\Program Files\\Lua\\5.1\\?.lua;C:\\Program Files\\Lua\\5.1\\?\\init.lua;C:\\Program Files\\Lua\\5.1\\lua\\?.luac;"
local is_run = true
--
local update_id = 0
--В файле telegram_settings.lua должны быть инициализированы переменные token и from_id
require ("telegram_settings")
-- Инициализируем бота
local bot = require("lua-bot-api").configure(token)
local my_orders = {} -- список обработанных ордеров для контроля, что уже отправляли по нему инфо в телеграм
local my_trades = {} -- список обработанных сделок для контроля
function main()
while is_run do
sleep(1000)
update_id = telegram_get (update_id)
end;
end
function OnInit()
message("Telegram-bot started!",1)
end
function OnStop()
is_run = false
message("Telegram-bot stopped!",1)
end
function OnOrder(order)
if orders_info ~= true then return end -- молчим о заявках, если нужно
if check_order (order.order_num) == 0 then
if bit.band(order.flags,1)>0 then
if bit.band(order.flags,4)>0 then
order_direction = "ORDER_SELL"
else
order_direction = "ORDER_BUY"
end
bot.sendMessage(from_id, order_direction.." "..order.sec_code.." P="..order.price.." Q="..order.balance.." #"..order.order_num)
else
--если заявка не активна
if bit.band(order["flags"],1)>0 then
if bit.band(order["flags"],8)>0 then
return
else
return
end
end
end
end
end
function OnTrade(trade_data)
if trades_info ~= true then return end -- молчим о сделках, если нужно
if check_trade(trade_data.trade_num) == 0 then
local trade_dir
if bit.band(trade_data.flags,4) > 0 then
trade_dir = "TRADE_SELL"
else
trade_dir = "TRADE_BUY"
end
bot.sendMessage(from_id, trade_dir.." "..trade_data.sec_code.." P="..trade_data.price.." Q="..trade_data.qty.." #"..trade_data.trade_num)
end
end
function check_order(ord_num)
--проверяет приходила уже инфо по ордеру с номером ord_num или нет.
--если приходила возвращает 1, если не приходила возвращает 0, и добавляет номер в список обработанных
for i = 1, #my_orders, 1 do
if ord_num == my_orders[i] then
return 1
end
end
table.insert(my_orders,ord_num) -- добавляем номер ордела в список обработанных
return 0
end
function check_trade(trade_num)
--проверяет приходила уже инфо по сделке с номером trade_num или нет.
--если приходила возвращает 1, если не приходила возвращает 0, и добавляет номер в список обработанных
for i = 1, #my_trades, 1 do
if trade_num == my_trades[i] then
return 1
end
end
table.insert(my_trades,trade_num) -- добавляем номер сделки в список обработанных
return 0
end
function telegram_get(update_id)
local updates = bot.getUpdates(update_id)
-- for each update, check the message
-- Note: processing a message does not prevent it from appearing again, unless
-- you feed it's update id (incremented by one) back into getUpdates()
for key, query in pairs(updates.result) do
update_id = query.update_id
--message (tostring(update_id),1)
-- only reply to private chats, not groups
if(query.message.chat.type == "private") then
message(query.message.from.id.." >> "..update_id.." >> "..query.message.text,1)
-- if message text was 'ping'
if query.message.text == "Ping" then
-- reply with 'pong'
bot.sendMessage(query.message.from.id, "Pong >> "..tostring(update_id))
-- if message text was 'photo'
--elseif query.message.text == "photo" then
-- get the users profile pictures
--local profilePicture = getUserProfilePhotos(query.message.from.id)
-- and send the first one back to him using its file id
--sendPhoto(query.message.from.id, profilePicture.result.photos[1][1].file_id)
elseif query.message.text == "Ri" then
if tonumber(getParamEx("SPBFUT","RIM6","STATUS").param_value) == 1 then status = "Торгуется" else status = "Не торгуется" end
bot.sendMessage(query.message.from.id, "RIM6 BID >> "..tostring(getParamEx("SPBFUT","RIM6","BID").param_value).." >> "..status)
elseif query.message.text == "Usd" then
if tonumber(getParamEx("CETS","USD000UTSTOM","STATUS").param_value) == 1 then status = "Торгуется" else status = "Не торгуется" end
bot.sendMessage(query.message.from.id, "USD BID >> "..tostring(getParamEx("CETS","USD000UTSTOM","BID").param_value).." >> "..status)
-- elseif query.message.text == "Fut" then
--
-- Fut = getFuturesLimit("SPBFUT", "410097К", 0).varmargin
-- bot.sendMessage(query.message.from.id, tostring(Fut).." fut USD BID >> "..tostring(getParamEx("CETS","USD000UTSTOM","BID").param_value))
else
if isConnected()==1 then status = "Is Connected" else status = "Not Connected" end
bot.sendMessage(query.message.from.id, query.message.text .." >> ".. status)
end
end
end
return update_id+1
end