Python Пишем QiwiBot (Telegram) + Исходники

Mnogoznall

Пользователь
27 Ноя 2018
274
320
150
dwh.pw
Telegram QlWl Bot
Приложение создано для рядовых пользователей Telegram и QlWl
С помощью данного продукта можно совершать банковские операции, просматривать статус платежей, искать ближайшие пункты пополнения, вообщем карманный KИBИ кошелёк в телеграмме


Для тех кому лень устанавливать могу дать адрес телеграмм своего бота уже установленного и улучшенной версии для пользования, данная версия с открытым исходным кодом для изучения или чего то ещё)

Пример работы бота
289

292

Далее читают те кто хочет разобраться как и через что работает бот, ссылку с инструментом и установкой можно найти в конце статьи.
Введение (используемые API) кликабельно

QiwiAPI

QiwiAPI карт терминалов

API для вычисления города по IP

API Яндекс карт

Геокодер Яндекс карт

Python-Telegram-Bot

Описание реализации

Структура:

Приложение разбито на 3 файла

  1. Bot.py — основная логика бота
  2. QIWI_API.py — работа с API
  3. Languages.json — тест кнопок и диалогов
Особенности:
Приложение использует 6 видов API Геокодер и Static API от компании «Яндекс» работают в связке с QlWl-Terminal-Map API и FreeGEOIP для отображения пользователю карты терминалов или их адресов. Так же у пользователя есть возможность отправить своё местоположение.
(модули
)

urllib — отправка GET запросов
json — помощь в отправке POST запросов и работа с локализацией
time — помощь в отправке POST запросов (UNIX TIME)
requests — отправка POST запросов
os — очистка рабочей папки после отправки изображения чека
telegram (Python-Telegram-Bot) — взаимодействие с серверами Telegram
(классы ошибок)


QiwiError(Exception)
SyntaxisError(QiwiError) "Query execution failed"

TokenError(QiwiError) "Wrong TOKEN"

class NoRightsError(QiwiError): "No right"

TransactionNotFound(QiwiError) "Transaction not found or missing payments with specified characteristics"

WalletError(QiwiError) "Wallet not found"

HistoryError(QiwiError) "Too many requests, the service is temporarily unavailable"

MapError(QiwiError) "Map processing errors"

NotFoundAddress(MapError) "Could not find address"

CheckError(QiwiError) "Could not get check"

WrongEmail(CheckError) "Wrong Email address"

WrongNumber(QiwiError) "Wrong phone number"

TransactionError(QiwiError) "Failed to carry out the transaction"

class UserQiwi

UserQiwi.url = https://edge.QlWl.com/

self.token(str) = токен пользователя
self.headers(dict) = headerы для выполнения запросов
self.urls(dict) = формы заполнения ссылок для запросов
self.currency(dict) = «конвертер валюты»
self.identification(dict) = «конвертер идентификаторов»
self.user_date(dict) = информация о пользователе


class UserQiwi

Данные представлены в виде:
(Название | Переменные | Описание | Тип возвращаемых данных)

(__init__self | token | объявляет нового пользователя | None)
(change_tokenself | new_token | меняет токен пользователя | None)
(get_user_token | self | возвращает пользовательски токен | str)
(get_balance | self | возвращает баланс счетов пользователя | str)
(update_info | self | обновляет self.user_data | None)
(get_info | self | возвращает информацию о пользователе | str)


class UserQiwi

Данные представлены в виде: (Название | Переменные | Описание | Тип возвращаемых данных)

(get_last_transactionsself | rows
(по умолчанию = 10) | Возвращает последние транзакции пользователя | str)
(get_info_about_transaction | self | transaction_id | Возвращает информацию по транзакции | str)
(get_map_terminates | self, address
(по умолчанию None) | Возвращает ссылку на изображение карты и адреса терминалов | dict)
(get_image_checkself | transaction_id, file_name (по умолчанию «check.jpg») | Создает изображение чека указанной транзакции (не работает с IN типом транзакций) | None)
(send_check_emailself | transaction_id, email
(по умолчанию None) | Отправляет изображение чека на почту. Если почта не указана используется почта пользователя | None)

class UserQiwi

Данные представлены в виде:
(Название | Переменные | Описание | Тип возвращаемых данных)

(transaction_telephoneself | amount, number
(по умолчанию None) | Переводит средства со счета владельца на указанный номер. Если такого нет, используется номер пользователя | None)
transaction_qiwiself | account_id, amount | Переводит средства со счета владельца на указанный счет | None)


Функции QIWI_API
run_the_query(headers, url) — Выполняет GET запрос (urllib + json) | dict/bool
found_address(ip) — Выполняет GET запрос (requests). Возвращает город определенный по ip адресу
str/bool write_file(headers, url, file_name) — Выполняет
GET запрос (urllib). Записывает изображение чека в указанный файл. | bool found_id(number) — Выполняет POST запрос
(requests). Возвращает id мобильного оператора. | str/bool



Bot.py

Данные представлены в виде:
(Название | Переменные | Описание)

(startbot | update | Начало работы с ботом)
(check_tokenbot| update, user_data | Проверка токена)
(balancebot | update, user_data | Отправляет баланс)
(transactionsbot | updateНачало | диалога по поводу транзакций.)
(check_statusbot | update | Просьба ввести id транзакции)
(answer_about_transactionbot | update, user_data | Отправляет информацию о транзакции)
(lastbot | update, user_data | Отпрвляет информацию о последних транзакицях)



Bot.py

Данные представлены в виде:
(Название | Переменные | Описание)

(terminalsbot | update, user_data | Начало работы с транзакциями)
(take_command_found_addressbot | update, user_data | Выбор типа ответа)
(take_addressbot | update | Просьба ввести адрес)
(take_locaionbot | update, user_data | Обработка координат геолокации пользователя)
(answer_about_terminatesbot | update | Отправка ответа)
(optionsbot | update | Начало диалога по поводу настроек)
(get_infobot | update, user_data | Отпрвляет информацию о пользователе)



Bot.py

Данные представлены в виде:
(Название | Переменные | Описание)

(take_new_tokenbot | update | Смена пользователя)
(update_userbot | update, user_data | Обновление информации аккаунта)
(versionbot | update | Отправка версии программы)
(checkbot | update, user_data | Начало диалога про чеки)
(dialog_emailbot | update, user_data | Начало диалога про почту)
(enter_emailbot | update | Просьба ввести email)
(get_emailbot | update, user_data | Получение email. Просьба ввести id транзакции)



Bot.py

Данные представлены в виде:
(Название | Переменные | Описание)

(enter_transaction_idbot | update | Просьба ввести id транзакции.)
(get_transaction_idbot | update, user_data | Вывод на экран/отправка на почту копии чека)
(paybot | update, user_data | Начало диалога про оплату)
(enter_user_idbot | update, user_data | Просьба ввести id клиента)
(get_user_idbot | update, user_data | Получение id клиента. Просьба ввести сумму перевода.)
(mobile_phonebot | update, user_data | Начало диалога про выбор номера мобильного телефона)
(enter_mobilebot | update | Просьба ввести номер мобильного телефона)


Bot.py

Данные представлены в виде:
(Название | Переменные | Описание)

(get_mobilebot | update, user_data | Получение номера мобильного телефона. Просьба ввести сумму оплаты.)
(enter_amountbot | update | Просьба ввести сумму оплаты.)
(get_amountbot | update, user_data | Оплата
мобильного/перевод
клиенту QlWl)
(wrong_answerbot | update | Отправка указания на использование клавиатуры)
(backbot | update | Возврат к начальному меню.)
(stopbot | update | Завершение работы с ботом)



Password: