xync-bot 0.3.24.dev12__py3-none-any.whl → 0.3.26__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of xync-bot might be problematic. Click here for more details.

@@ -1,156 +1,159 @@
1
1
  from asyncio import gather
2
2
  from datetime import datetime
3
3
 
4
- import PGram
5
4
  from aiogram import Router, F
6
5
  from aiogram.filters import Command
7
6
  from aiogram.types import Message, CallbackQuery
8
7
  from aiogram.fsm.context import FSMContext
9
- from xync_bot.routers.pay.dep import fill_creds, fill_actors, dlt, ans, Store
8
+ from xync_bot.routers.pay.dep import fill_creds, fill_actors, dlt, ans
10
9
  from xync_schema import models
11
10
 
12
11
  from xync_bot.routers.pay import cd, dep, window
12
+ from xync_bot.store import Store
13
13
 
14
- pay = Router()
14
+ pr = Router(name="pay")
15
15
 
16
16
 
17
- @pay.message(Command("pay"))
18
- async def h_start(msg: Message):
19
- """Step 1: Select target type"""
20
- store: Store = msg.bot.store
21
- store.curr.is_target = True
22
- await gather(window.type_select(msg), dlt(msg))
23
- store.perm.user = await models.User.get(username_id=msg.from_user.id)
24
- store.perm.creds, store.perm.cur_creds = await fill_creds(store.perm.user.person_id)
25
- store.perm.actors = await fill_actors(store.perm.user.person_id)
17
+ @pr.message(Command("pay"))
18
+ async def h_start(msg: Message, store: Store, **kwargs):
19
+ """Step 1: Select a target type"""
20
+ uid = msg.from_user.id
21
+ store.pers[uid] = Store.Personal(1)
22
+ store.pers[uid].curr.is_target = True
23
+ await gather(window.type_select(msg, store), dlt(msg))
24
+ store.pers[uid].user = await models.User.get(username_id=msg.from_user.id)
25
+ store.pers[uid].creds, store.pers[uid].cur_creds = await fill_creds(store.pers[uid].user.person_id)
26
+ store.pers[uid].actors = await fill_actors(store.pers[uid].user.person_id)
26
27
 
27
28
 
28
- @pay.callback_query(cd.MoneyType.filter(F.is_fiat))
29
- async def h_got_fiat_type(query: CallbackQuery, bot: PGram):
29
+ @pr.callback_query(cd.MoneyType.filter(F.is_fiat))
30
+ async def h_got_fiat_type(query: CallbackQuery, store: Store):
30
31
  """Step 2f: Select cur"""
31
- bot.store.curr.is_fiat = True
32
- await gather(window.cur_select(query.message), ans(query, "Понял, фиат"))
32
+ uid = query.from_user.id
33
+ store.pers[uid].curr.is_fiat = True
34
+ await gather(window.cur_select(query.message, store), ans(query, "Понял, фиат"))
33
35
 
34
36
 
35
- @pay.callback_query(cd.MoneyType.filter(F.is_fiat.__eq__(0)))
36
- async def h_got_crypto_type(query: CallbackQuery, bot: PGram):
37
+ @pr.callback_query(cd.MoneyType.filter(F.is_fiat.__eq__(0)))
38
+ async def h_got_crypto_type(query: CallbackQuery, store: Store):
37
39
  """Step 2c: Select coin"""
38
- bot.store.curr.is_fiat = False
39
- await gather(window.coin_select(query.message), ans(query, "Понял, крипта"))
40
+ store.pers.curr.is_fiat = False
41
+ await gather(window.coin_select(query.message, store), ans(query, "Понял, крипта"))
40
42
 
41
43
 
42
- @pay.callback_query(cd.Coin.filter())
43
- async def h_got_coin(query: CallbackQuery, callback_data: cd.Coin, bot: PGram):
44
+ @pr.callback_query(cd.Coin.filter())
45
+ async def h_got_coin(query: CallbackQuery, callback_data: cd.Coin, store: Store):
44
46
  """Step 3c: Select target ex"""
45
- setattr(bot.store.pay, ("t" if bot.store.curr.is_target else "s") + "_coin_id", callback_data.id)
46
- await gather(window.ex_select(query.message), ans(query, "Эта монета есть на следующих биржах"))
47
+ setattr(store.pay, ("t" if store.pers.curr.is_target else "s") + "_coin_id", callback_data.id)
48
+ await gather(window.ex_select(query.message, store), ans(query, "Эта монета есть на следующих биржах"))
47
49
 
48
50
 
49
- @pay.callback_query(cd.Cur.filter())
50
- async def h_got_cur(query: CallbackQuery, callback_data: cd.Cur, bot: PGram):
51
+ @pr.callback_query(cd.Cur.filter())
52
+ async def h_got_cur(query: CallbackQuery, callback_data: cd.Cur, store: Store):
51
53
  """Step 3f: Select target pm"""
52
- setattr(bot.store.pay, ("t" if bot.store.curr.is_target else "s") + "_cur_id", callback_data.id)
53
- await gather(window.pm(query.message), ans(query, "Вот платежные системы доступные для этой валюты"))
54
+ setattr(store.pay, ("t" if store.pers.curr.is_target else "s") + "_cur_id", callback_data.id)
55
+ await gather(window.pm(query.message, store), ans(query, "Вот платежные системы доступные для этой валюты"))
54
56
 
55
57
 
56
- @pay.callback_query(cd.Pm.filter(F.is_target))
57
- async def h_got_target_pm(query: CallbackQuery, callback_data: cd.Pm, state: FSMContext):
58
+ @pr.callback_query(cd.Pm.filter(F.is_target))
59
+ async def h_got_target_pm(query: CallbackQuery, callback_data: cd.Pm, state: FSMContext, store: Store):
58
60
  """Step 4f: Fill target cred.detail"""
59
- query.message.bot.store.pay.t_pmcur_id = callback_data.pmcur_id
61
+ store.pay.t_pmcur_id = callback_data.pmcur_id
60
62
  await gather(
61
- window.fill_cred_dtl(query.message),
63
+ window.fill_cred_dtl(query.message, store),
62
64
  ans(query, "Теперь нужны реквизиты"),
63
65
  state.set_state(dep.CredState.detail),
64
66
  )
65
67
 
66
68
 
67
- @pay.callback_query(cd.Cred.filter())
68
- async def h_got_cred(query: CallbackQuery, callback_data: cd.Cred, state: FSMContext):
69
- query.message.bot.store.pay.cred_id = callback_data.id
69
+ @pr.callback_query(cd.Cred.filter())
70
+ async def h_got_cred(query: CallbackQuery, callback_data: cd.Cred, state: FSMContext, store: Store):
71
+ store.pay.cred_id = callback_data.id
70
72
  await gather(
71
- window.amount(query.message), ans(query, "Теперь нужна сумма"), state.set_state(dep.PaymentState.amount)
73
+ window.amount(query.message, store), ans(query, "Теперь нужна сумма"), state.set_state(dep.PaymentState.amount)
72
74
  )
73
75
 
74
76
 
75
- @pay.message(dep.CredState.detail)
76
- async def h_got_cred_dtl(msg: Message, state: FSMContext):
77
+ @pr.message(dep.CredState.detail)
78
+ async def h_got_cred_dtl(msg: Message, state: FSMContext, store: Store):
77
79
  """Step 4.1f: Fill target cred.name"""
78
- msg.bot.store.pay.cred_dtl = msg.text
79
- await gather(window.fill_cred_name(msg), dlt(msg), state.set_state(dep.CredState.name))
80
+ store.pay.cred_dtl = msg.text
81
+ await gather(window.fill_cred_name(msg, store), dlt(msg), state.set_state(dep.CredState.name))
80
82
 
81
83
 
82
- @pay.message(dep.CredState.name)
83
- async def h_got_cred_name(msg: Message, state: FSMContext):
84
+ @pr.message(dep.CredState.name)
85
+ async def h_got_cred_name(msg: Message, state: FSMContext, store: Store):
84
86
  """Step 5f: Save target cred"""
85
- store: Store = msg.bot.store
87
+ uid = msg.from_user.id
86
88
  cred, _ = await models.Cred.update_or_create(
87
89
  {"name": msg.text},
88
90
  detail=store.pay.cred_dtl,
89
- person_id=store.perm.user.person_id,
91
+ person_id=store.pers[uid].user.person_id,
90
92
  pmcur_id=store.pay.t_pmcur_id,
91
93
  )
92
94
  store.pay.cred_id = cred.id
93
- store.perm.creds[cred.id] = cred
94
- await gather(window.amount(msg), dlt(msg), state.set_state(dep.PaymentState.amount))
95
+ store.pers[uid].creds[cred.id] = cred
96
+ await gather(window.amount(msg, store), dlt(msg), state.set_state(dep.PaymentState.amount))
95
97
 
96
98
 
97
- @pay.callback_query(cd.Ex.filter())
98
- async def h_got_ex(query: CallbackQuery, callback_data: cd.Ex, state: FSMContext):
99
+ @pr.callback_query(cd.Ex.filter())
100
+ async def h_got_ex(query: CallbackQuery, callback_data: cd.Ex, state: FSMContext, store: Store):
99
101
  """Step 4c: Save target"""
100
- store: Store = query.message.bot.store
101
- ist = store.curr.is_target
102
+ uid = query.from_user.id
103
+ ist = store.pers.curr.is_target
102
104
  setattr(store.pay, ("t" if ist else "s") + "_ex_id", callback_data.id)
103
105
  if ist:
104
- await window.amount(query.message)
105
- actor_id = store.perm.actors[store.pay.t_ex_id]
106
+ await window.amount(query.message, store)
107
+ actor_id = store.pers[uid].actors[store.pay.t_ex_id]
106
108
  addr = await models.Addr.get(coin_id=store.pay.t_coin_id, actor_id=actor_id)
107
109
  store.pay.addr_id = addr.id
108
110
  else:
109
- await window.set_ppo(query.message)
111
+ await window.set_ppo(query.message, store)
110
112
  await ans(query, f"Биржа {store.glob.exs[callback_data.id]} выбрана")
111
113
  await state.set_state(dep.PaymentState.amount)
112
114
 
113
115
 
114
- @pay.message(dep.PaymentState.amount)
115
- async def h_got_amount(msg: Message, state: FSMContext):
116
- """Step 6: Save target amount"""
117
- store: Store = msg.bot.store
116
+ @pr.message(dep.PaymentState.amount)
117
+ async def h_got_amount(msg: Message, state: FSMContext, store: Store):
118
+ """Step 6: Save a target amount"""
118
119
  if not msg.text.isnumeric():
119
- store.curr.msg_to_del = await msg.answer("Пожалуйста, введите корректное число")
120
+ store.pers.curr.msg_to_del = await msg.answer("Пожалуйста, введите корректное число")
120
121
  return
121
- if store.curr.msg_to_del:
122
- await store.curr.msg_to_del.delete()
122
+ if store.pers.curr.msg_to_del:
123
+ await store.pers.curr.msg_to_del.delete()
123
124
  store.pay.amount = float(msg.text)
124
125
  """Step 7: Select source type"""
125
- store.curr.is_target = False
126
- await gather((window.type_select if store.curr.is_fiat else window.cur_select)(msg), dlt(msg), state.clear())
126
+ store.pers.curr.is_target = False
127
+ await gather(
128
+ (window.type_select if store.pers.curr.is_fiat else window.cur_select)(msg, store), dlt(msg), state.clear()
129
+ )
127
130
 
128
131
 
129
- @pay.callback_query(cd.Pm.filter(F.is_target.__eq__(0)))
130
- async def h_got_source_pm(query: CallbackQuery, callback_data: cd.Pm):
131
- store: Store = query.message.bot.store
132
+ @pr.callback_query(cd.Pm.filter(F.is_target.__eq__(0)))
133
+ async def h_got_source_pm(query: CallbackQuery, callback_data: cd.Pm, store: Store):
132
134
  store.pay.s_pmcur_id = callback_data.pmcur_id
133
135
  await gather(
134
- window.set_ppo(query.message),
136
+ window.set_ppo(query.message, store),
135
137
  ans(query, store.glob.pmcurs[callback_data.pmcur_id]),
136
138
  )
137
139
 
138
140
 
139
- @pay.callback_query(cd.Ppo.filter())
140
- async def h_got_ppo(query: CallbackQuery, callback_data: cd.Ppo):
141
- query.message.bot.store.pay.ppo = callback_data.num
142
- await gather(window.set_urgency(query.message), ans(query, str(callback_data.num)))
141
+ @pr.callback_query(cd.Ppo.filter())
142
+ async def h_got_ppo(query: CallbackQuery, callback_data: cd.Ppo, store: Store):
143
+ store.pay.ppo = callback_data.num
144
+ await gather(window.set_urgency(query.message, store), ans(query, str(callback_data.num)))
143
145
 
144
146
 
145
- @pay.callback_query(cd.Time.filter())
146
- async def h_got_urgency(query: CallbackQuery, callback_data: cd.Time):
147
- query.message.bot.store.pay.urg = callback_data.minutes
148
- await window.create_payreq(query.message)
147
+ @pr.callback_query(cd.Time.filter())
148
+ async def h_got_urgency(query: CallbackQuery, callback_data: cd.Time, store: Store):
149
+ # payreq_id = store.pers[query.from_user.id].
150
+ store.pay.urg = callback_data.minutes
151
+ await window.create_payreq(query.message, store)
149
152
  await ans(query, f"Ok {callback_data.minutes} min.")
150
153
 
151
154
 
152
155
  # ACTIONS
153
- @pay.callback_query(cd.Action.filter(F.act.__eq__(cd.ActionType.received)))
156
+ @pr.callback_query(cd.Action.filter(F.act.__eq__(cd.ActionType.received)))
154
157
  async def payment_confirmed(query: CallbackQuery, state: FSMContext):
155
158
  await ans(query, None)
156
159
  payed_at = datetime.now()
@@ -164,7 +167,7 @@ async def payment_confirmed(query: CallbackQuery, state: FSMContext):
164
167
  await window.success(query.message)
165
168
 
166
169
 
167
- @pay.callback_query(cd.Action.filter(F.act.__eq__(cd.ActionType.not_received)))
170
+ @pr.callback_query(cd.Action.filter(F.act.__eq__(cd.ActionType.not_received)))
168
171
  async def no_payment(query: CallbackQuery, state: FSMContext):
169
172
  await ans(query, None)
170
173
  await state.update_data(timer_active=False)
@@ -174,80 +177,80 @@ async def no_payment(query: CallbackQuery, state: FSMContext):
174
177
  await state.set_state(dep.Report.text)
175
178
 
176
179
 
177
- @pay.message(dep.Report.text)
180
+ @pr.message(dep.Report.text)
178
181
  async def payment_not_specified(msg: Message, state: FSMContext):
179
182
  await state.update_data(text=msg.text)
180
183
  data = await state.get_data()
181
184
  complaint_text = (
182
185
  f"Жалоба на неполученный платеж:\n"
183
186
  f"Пользователь: @{msg.from_user.username or msg.from_user.id}\n"
184
- f"Детали платежа: {data["text"]}\n"
187
+ f"Детали платежа: {data['text']}\n"
185
188
  f"Время: {msg.date.strftime('%Y-%m-%d %H:%M:%S')}"
186
189
  )
187
190
  await msg.bot.send_message(chat_id="xyncpay", text=complaint_text)
188
191
 
189
192
 
190
193
  # NAVIGATION
191
- @pay.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_type, cd.PayStep.s_type])))
192
- async def handle_home(query: CallbackQuery, state: FSMContext):
193
- await gather(window.type_select(query.message), state.clear(), ans(query, "Создаем платеж заново"))
194
+ @pr.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_type, cd.PayStep.s_type])))
195
+ async def handle_home(query: CallbackQuery, state: FSMContext, store: Store):
196
+ await gather(window.type_select(query.message, store), state.clear(), ans(query, "Создаем платеж заново"))
194
197
 
195
198
 
196
- @pay.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_coin, cd.PayStep.s_coin])))
197
- async def to_coin_select(query: CallbackQuery, state: FSMContext):
199
+ @pr.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_coin, cd.PayStep.s_coin])))
200
+ async def to_coin_select(query: CallbackQuery, state: FSMContext, store: Store):
198
201
  await ans(query, None)
199
202
  is_target = await state.get_value("is_target")
200
203
  pref = "t" if is_target else "s"
201
204
  await state.update_data({pref + "_ex_id": None, pref + "_coin_id": None})
202
- await window.coin_select(query.message)
205
+ await window.coin_select(query.message, store)
203
206
 
204
207
 
205
- @pay.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_cur, cd.PayStep.s_cur])))
206
- async def to_cur_select(query: CallbackQuery, state: FSMContext):
208
+ @pr.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_cur, cd.PayStep.s_cur])))
209
+ async def to_cur_select(query: CallbackQuery, state: FSMContext, store: Store):
207
210
  await ans(query, None)
208
211
  is_target = await state.get_value("is_target")
209
212
  pref = "t" if is_target else "s"
210
213
  await state.update_data({pref + "_pmcur_id": None, pref + "_cur_id": None})
211
- await window.cur_select(query.message)
214
+ await window.cur_select(query.message, store)
212
215
 
213
216
 
214
- @pay.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_pm, cd.PayStep.s_pm])))
215
- async def to_pm_select(query: CallbackQuery, state: FSMContext):
217
+ @pr.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_pm, cd.PayStep.s_pm])))
218
+ async def to_pm_select(query: CallbackQuery, store: Store):
216
219
  await ans(query, None)
217
- await window.pm(query.message)
220
+ await window.pm(query.message, store)
218
221
 
219
222
 
220
- @pay.callback_query(cd.PayNav.filter(F.to.__eq__(cd.PayStep.t_cred_dtl)))
221
- async def back_to_cred_detail(query: CallbackQuery, state: FSMContext):
223
+ @pr.callback_query(cd.PayNav.filter(F.to.__eq__(cd.PayStep.t_cred_dtl)))
224
+ async def back_to_cred_detail(query: CallbackQuery, state: FSMContext, store: Store):
222
225
  await ans(query, None)
223
226
  await state.update_data(detail=None)
224
- await window.fill_cred_dtl(query.message)
227
+ await window.fill_cred_dtl(query.message, store)
225
228
 
226
229
 
227
- @pay.callback_query(cd.PayNav.filter(F.to.__eq__(cd.PayStep.t_cred_name)))
228
- async def back_to_cred_name(query: CallbackQuery, state: FSMContext):
230
+ @pr.callback_query(cd.PayNav.filter(F.to.__eq__(cd.PayStep.t_cred_name)))
231
+ async def back_to_cred_name(query: CallbackQuery, state: FSMContext, store: Store):
229
232
  await ans(query, None)
230
233
  await state.update_data(name=None)
231
- await window.fill_cred_name(query.message)
234
+ await window.fill_cred_name(query.message, store)
232
235
 
233
236
 
234
- @pay.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_ex, cd.PayStep.s_ex])))
235
- async def back_to_ex_select(query: CallbackQuery, state: FSMContext):
237
+ @pr.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_ex, cd.PayStep.s_ex])))
238
+ async def back_to_ex_select(query: CallbackQuery, state: FSMContext, store: Store):
236
239
  await ans(query, None)
237
240
  await state.update_data({("t" if await state.get_value("is_target") else "s") + "ex_id": None})
238
- await window.ex_select(query.message)
241
+ await window.ex_select(query.message, store)
239
242
 
240
243
 
241
- @pay.callback_query(cd.PayNav.filter(F.to.__eq__(cd.PayStep.t_amount)))
242
- async def back_to_amount(query: CallbackQuery, state: FSMContext):
244
+ @pr.callback_query(cd.PayNav.filter(F.to.__eq__(cd.PayStep.t_amount)))
245
+ async def back_to_amount(query: CallbackQuery, state: FSMContext, store: Store):
243
246
  await ans(query, None)
244
247
  await state.update_data(amount=None)
245
- await window.amount(query.message)
248
+ await window.amount(query.message, store)
246
249
  await state.set_state(dep.PaymentState.amount)
247
250
 
248
251
 
249
- @pay.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_pm])))
250
- async def back_to_payment(query: CallbackQuery, state: FSMContext):
252
+ @pr.callback_query(cd.PayNav.filter(F.to.in_([cd.PayStep.t_pm])))
253
+ async def back_to_payment(query: CallbackQuery, state: FSMContext, store: Store):
251
254
  await ans(query, None)
252
255
  await state.update_data(payment=None)
253
- await window.pm(query.message)
256
+ await window.pm(query.message, store)
@@ -6,23 +6,15 @@ from aiogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton
6
6
  from aiogram.utils.keyboard import InlineKeyboardBuilder
7
7
  from xync_schema import models
8
8
 
9
- from xync_bot.routers.pay.dep import (
10
- edt,
11
- need_ppo,
12
- Store,
13
- get_merch_target,
14
- fmt_sec,
15
- client_have_coin_amount,
16
- client_target_repr,
17
- )
18
-
9
+ from xync_bot.routers.pay.dep import edt, fmt_sec
19
10
  from xync_bot.routers.pay import cd, dep
11
+ from xync_bot.store import Store
20
12
 
21
13
 
22
- async def type_select(msg: Message):
14
+ async def type_select(msg: Message, store: Store):
23
15
  """Step 1: Select type"""
24
- store: Store = msg.bot.store
25
- ist: bool = store.curr.is_target
16
+ uid = msg.from_user.id
17
+ ist: bool = store.pers[uid].curr.is_target
26
18
  rm = InlineKeyboardMarkup(
27
19
  inline_keyboard=[
28
20
  [
@@ -30,33 +22,34 @@ async def type_select(msg: Message):
30
22
  text="Банковская валюта", callback_data=cd.MoneyType(is_fiat=1, is_target=ist).pack()
31
23
  ),
32
24
  InlineKeyboardButton(
33
- text="Крипта", callback_data=cd.MoneyType(is_fiat=0, is_target=store.curr.is_target).pack()
25
+ text="Крипта",
26
+ callback_data=cd.MoneyType(is_fiat=0, is_target=store.pers[uid].curr.is_target).pack(),
34
27
  ),
35
28
  ]
36
29
  ]
37
30
  )
38
- if store.curr.is_target:
31
+ if store.pers[uid].curr.is_target:
39
32
  txt = "Что нужно?"
40
33
  else:
41
- if store.pay.t_coin_id:
42
- inf = f"{store.glob.coins[store.pay.t_coin_id]} на {store.glob.exs[store.pay.t_ex_id]}:{store.pay.addr_id}"
34
+ if store.pers[uid].pay.t_coin_id:
35
+ inf = f"{store.glob.coins[store.pers[uid].pay.t_coin_id]} на {store.glob.exs[store.pers[uid].pay.t_ex_id]}:{store.pay.addr_id}"
43
36
  else:
44
37
  cur = store.glob.curs[store.pay.t_cur_id].ticker
45
- cred: models.Cred = store.perm.creds[store.pay.cred_id]
38
+ cred: models.Cred = store.pers[uid].creds[store.pay.cred_id]
46
39
  inf = f"{cur} на {store.glob.pmcurs[store.pay.t_pmcur_id]}: {cred.repr()}"
47
40
  txt = f"Нужен платеж: {store.pay.amount} {inf}\nЧем будете платить?"
48
- if store.perm.msg_id:
41
+ if store.pers[uid].msg_id:
49
42
  await edt(msg, txt, rm)
50
43
  else:
51
44
  msg = await msg.answer(txt, reply_markup=rm)
52
- store.perm.msg_id = msg.message_id
45
+ store.pers[uid].msg_id = msg.message_id
53
46
 
54
47
 
55
- async def cur_select(msg: Message):
48
+ async def cur_select(msg: Message, store: Store):
56
49
  """Common using cur func"""
57
50
  builder = InlineKeyboardBuilder()
58
- ist: bool = msg.bot.store.curr.is_target
59
- for cur_id, cur in msg.bot.store.glob.curs.items():
51
+ ist: bool = store.curr.is_target
52
+ for cur_id, cur in store.glob.curs.items():
60
53
  builder.button(text=cur.ticker + dep.flags[cur.ticker], callback_data=cd.Cur(id=cur_id, is_target=ist))
61
54
  builder.button(text="Назад к выбору типа", callback_data=cd.PayNav(to=cd.PayStep.t_type))
62
55
  builder.adjust(3, 3, 3, 3, 3, 1)
@@ -64,10 +57,9 @@ async def cur_select(msg: Message):
64
57
  await edt(msg, "Выбери валюту котор" + sfx, builder.as_markup())
65
58
 
66
59
 
67
- async def coin_select(msg: Message):
60
+ async def coin_select(msg: Message, store: Store):
68
61
  """Common using coin func"""
69
62
  builder = InlineKeyboardBuilder()
70
- store: Store = msg.bot.store
71
63
  for coin_id, ticker in store.glob.coins.items():
72
64
  builder.button(text=ticker, callback_data=cd.Coin(id=coin_id, is_target=store.curr.is_target))
73
65
  builder.button(
@@ -79,8 +71,7 @@ async def coin_select(msg: Message):
79
71
  await msg.edit_text("Выберите монету котор" + sfx, reply_markup=builder.as_markup())
80
72
 
81
73
 
82
- async def ex_select(msg: Message):
83
- store: Store = msg.bot.store
74
+ async def ex_select(msg: Message, store: Store):
84
75
  ist = store.curr.is_target
85
76
  coin_id = getattr(store.pay, ("t" if ist else "s") + "_coin_id")
86
77
  builder = InlineKeyboardBuilder()
@@ -95,8 +86,7 @@ async def ex_select(msg: Message):
95
86
  await msg.edit_text("На какую биржу?" if ist else "С какой биржи?", reply_markup=keyboard)
96
87
 
97
88
 
98
- async def pm(msg: Message):
99
- store: Store = msg.bot.store
89
+ async def pm(msg: Message, store: Store):
100
90
  ist = store.curr.is_target
101
91
  cur_id = getattr(store.pay, ("t" if ist else "s") + "_cur_id")
102
92
  builder = InlineKeyboardBuilder()
@@ -111,13 +101,13 @@ async def pm(msg: Message):
111
101
  await msg.edit_text("На какую платежную систему?" if ist else "C какой платежной системы?", reply_markup=keyboard)
112
102
 
113
103
 
114
- async def fill_cred_dtl(msg: Message):
104
+ async def fill_cred_dtl(msg: Message, store: Store):
105
+ uid = msg.from_user.id
115
106
  builder = InlineKeyboardBuilder()
116
- store: Store = msg.bot.store
117
107
  txt = "В"
118
- if cred_ids := store.perm.cur_creds.get(store.pay.t_pmcur_id):
108
+ if cred_ids := store.pers[uid].cur_creds.get(store.pay.t_pmcur_id):
119
109
  for cred_id in cred_ids:
120
- cred = store.perm.creds[cred_id]
110
+ cred = store.pers[uid].creds[cred_id]
121
111
  builder.button(text=cred.repr(), callback_data=cd.Cred(id=cred_id))
122
112
  txt = "Выберите реквизиты куда нужно получить деньги, если в списке нет нужных, то\nв"
123
113
 
@@ -130,22 +120,20 @@ async def fill_cred_dtl(msg: Message):
130
120
  )
131
121
 
132
122
 
133
- async def fill_cred_name(msg: Message):
123
+ async def fill_cred_name(msg: Message, store: Store):
134
124
  builder = InlineKeyboardBuilder()
135
125
  builder.button(text="Назад к вводу реквизитов", callback_data=cd.PayNav(to=cd.PayStep.t_cred_dtl))
136
126
  builder.button(text="Домой", callback_data=cd.PayNav(to=cd.PayStep.t_type))
137
127
  builder.adjust(2)
138
- store: Store = msg.bot.store
139
128
  cur = store.glob.curs[store.pay.t_cur_id]
140
129
  payment = store.glob.pmcurs[store.pay.t_pmcur_id]
141
130
  detail = store.pay.cred_dtl
142
131
  await edt(msg, f"{cur.ticker}:{payment}:{detail}: Введите имя получателя", builder.as_markup())
143
132
 
144
133
 
145
- async def amount(msg: Message):
134
+ async def amount(msg: Message, store: Store):
146
135
  """Step 5: Filling target amount"""
147
136
  builder = InlineKeyboardBuilder()
148
- store: Store = msg.bot.store
149
137
  if store.curr.is_fiat:
150
138
  cur_coin = store.glob.curs[store.pay.t_cur_id].ticker
151
139
  builder.button(text="Назад к вводу имени", callback_data=cd.PayNav(to=cd.PayStep.t_cred_name))
@@ -161,10 +149,9 @@ async def amount(msg: Message):
161
149
  await edt(msg, f"Введите нужную сумму {cur_coin} для {t_name}", builder.as_markup())
162
150
 
163
151
 
164
- async def set_ppo(msg: Message):
165
- store: Store = msg.bot.store
152
+ async def set_ppo(msg: Message, store: Store):
166
153
  ist = store.curr.is_target
167
- if nppo := await need_ppo(store):
154
+ if nppo := await store.need_ppo():
168
155
  builder = InlineKeyboardBuilder()
169
156
  builder.button(text="Нет", callback_data=cd.Ppo(num=1, is_target=ist)).button(
170
157
  text="Да", callback_data=cd.Ppo(num=2, is_target=ist)
@@ -180,9 +167,8 @@ async def set_ppo(msg: Message):
180
167
  await set_urgency(msg)
181
168
 
182
169
 
183
- async def set_urgency(msg: Message):
184
- store: Store = msg.bot.store
185
- if not store.curr.is_fiat or await client_have_coin_amount(store):
170
+ async def set_urgency(msg: Message, store: Store):
171
+ if not store.curr.is_fiat or await store.client_have_coin_amount():
186
172
  return await create_payreq(msg) # next
187
173
  builder = InlineKeyboardBuilder()
188
174
  (
@@ -198,19 +184,19 @@ async def set_urgency(msg: Message):
198
184
  return await edt(msg, "Сколько можешь ждать?", builder.as_markup())
199
185
 
200
186
 
201
- async def create_payreq(msg: Message):
202
- store: Store = msg.bot.store
187
+ async def create_payreq(msg: Message, store: Store):
188
+ uid = msg.from_user.id
203
189
  pay_req, _ = await models.PayReq.update_or_create(
204
190
  {"pay_until": datetime.now() + timedelta(minutes=store.pay.urg)},
205
191
  amount=store.pay.amount,
206
192
  parts=store.pay.ppo,
207
193
  addr_id=store.pay.addr_id,
208
194
  cred_id=store.pay.cred_id,
209
- user=store.perm.user,
195
+ user=store.pers[uid].user,
210
196
  )
211
197
  store.pay.pr_id = pay_req.id
212
- inp, txt = await get_merch_target(store)
213
- ccred, ctxt = await client_target_repr(store)
198
+ inp, txt = await store.get_merch_target()
199
+ ccred, ctxt = await store.client_target_repr()
214
200
  txt += f"\nИ получите {store.pay.amount} {ctxt} в течение {fmt_sec(store.pay.urg * 60)}"
215
201
  if store.pay.ppo > 1:
216
202
  txt += f" максимум {store.pay.ppo} платежами"
@@ -224,14 +210,14 @@ async def create_payreq(msg: Message):
224
210
  # create_task(window.run_timer(msg))В
225
211
 
226
212
 
227
- async def run_timer(message, state: FSMContext):
213
+ async def run_timer(msg, state: FSMContext):
228
214
  builder = InlineKeyboardBuilder()
229
215
  builder.button(text="Платеж получен", callback_data=cd.Action(act=cd.ActionType.received))
230
216
 
231
217
  seconds = await state.get_value("timer") * 60
232
218
 
233
219
  try:
234
- await message.edit_text(f"⏳ Осталось {fmt_sec(seconds)}", reply_markup=builder.as_markup())
220
+ await msg.edit_text(f"⏳ Осталось {fmt_sec(seconds)}", reply_markup=builder.as_markup())
235
221
  except Exception:
236
222
  return
237
223
 
@@ -239,7 +225,7 @@ async def run_timer(message, state: FSMContext):
239
225
  await sleep(1)
240
226
  seconds -= 1
241
227
  try:
242
- await message.edit_text(f"⏳ Осталось {fmt_sec(seconds)}", reply_markup=builder.as_markup())
228
+ await msg.edit_text(f"⏳ Осталось {fmt_sec(seconds)}", reply_markup=builder.as_markup())
243
229
  await state.update_data(timer=seconds)
244
230
  except Exception:
245
231
  break
@@ -249,7 +235,7 @@ async def run_timer(message, state: FSMContext):
249
235
  builder.button(text="Платеж получен", callback_data=cd.Action(act=cd.ActionType.received))
250
236
  builder.button(text="Денег нет", callback_data=cd.Action(act=cd.ActionType.not_received))
251
237
  try:
252
- await message.edit_text("⏳ Время вышло!", reply_markup=builder.as_markup())
238
+ await msg.edit_text("⏳ Время вышло!", reply_markup=builder.as_markup())
253
239
  except Exception:
254
240
  pass
255
241