ВСЕМ ПРИВЕТ Наткнулся на статью (https://lolz.live/threads/7193095 ) и доделал его в виде телеграмм бота Приступим к установке! Установка Pyhton 1. Заходим на официальный сайт Python и скачиваем последнюю версию ПО 2. При установке обязательно!!! поставьте галочку "Add Python to PATH" Создаём бота 1. Ищем в телеграмме BotFather и после пишем /newbot . Даём имя боту и получаем токен Запускаем бота 1. Создайте скрипт с названием main.py и вставьте туда следующий скрипт import random import time import logging import requests import telebot from telebot import types # Telegram bot token TOKEN = "TOKEN_BOT" # Enable logging logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO ) logger = logging.getLogger(__name__) # API URLs URL_ME = "https://gateway.blum.codes/v1/user/me" URL_BALANCE = "https://game-domain.blum.codes/api/v1/user/balance" URL_PLAY_GAME = "https://game-domain.blum.codes/api/v1/game/play" URL_CLAIM_REWARD = "https://game-domain.blum.codes/api/v1/game/claim" # Constants MIN_POINTS = 152 MAX_POINTS = 184 MIN_SLEEP_TIME = 28 MAX_SLEEP_TIME = 35 # Initialize bot with your token bot = telebot.TeleBot(TOKEN) class InvalidToken(Exception): pass class BlumAPI: def __init__(self, authorization_token) -> None: self.headers = { 'Authorization': authorization_token } def request(self, request_method, url, payload=None): response = getattr(requests, request_method)(url, headers=self.headers, data=payload) if response.status_code == 401: raise InvalidToken(response.text) return response def get_me(self): response = self.request('get', URL_ME) if not response.ok: raise Exception(f'Проблема при получении имени пользователя!\nТекст ошибки с сервера: {response.text}') return response.json() def get_balance(self): response = self.request('get', URL_BALANCE) if not response.ok: raise Exception(f'Проблема при получении баланса!\nТекст ошибки с сервера: {response.text}') return response.json() def play_game(self): response = self.request('post', URL_PLAY_GAME) if not response.ok: raise Exception(f'При попытке сыграть в игру произошла ошибка!\nТекст ошибки с сервера: {response.text}') return response.json() def claim_reward(self, game_id: str, points: int): payload = {'gameId': game_id, 'points': points} response = self.request('post', URL_CLAIM_REWARD, payload=payload) if not response.ok: raise Exception(f'При попытке собрать награду произошла ошибка!\nТекст ошибки с сервера: {response.text}') # User data storage user_data = {} @bot.message_handler(commands=['start']) def start(message): user_data[message.chat.id] = {} bot.send_message(message.chat.id, 'Введите токен авторизации Blum:') bot.register_next_step_handler(message, get_auth) def get_auth(message): user_data[message.chat.id]['token'] = message.text try: blum_api = BlumAPI(user_data[message.chat.id]['token']) username = blum_api.get_me().get('username') user_data[message.chat.id]['blum_api'] = blum_api user_data[message.chat.id]['username'] = username main_menu(message) except InvalidToken as e: bot.send_message(message.chat.id, f'Ошибка с токеном: {e}') bot.register_next_step_handler(message, get_auth) except Exception as e: bot.send_message(message.chat.id, f'Ошибка: {e}') bot.register_next_step_handler(message, get_auth) def main_menu(message): markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True) markup.add(types.KeyboardButton('Играть')) markup.add(types.KeyboardButton('Изменить настройки')) bot.send_message(message.chat.id, f'Привет, {user_data[message.chat.id]["username"]}! Что вы хотите сделать?', reply_markup=markup) bot.register_next_step_handler(message, handle_main_menu) def handle_main_menu(message): if message.text == 'Играть': play_game(message) elif message.text == 'Изменить настройки': settings_menu(message) else: bot.send_message(message.chat.id, 'Пожалуйста, выберите "Играть" или "Изменить настройки".') bot.register_next_step_handler(message, handle_main_menu) def settings_menu(message): markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True) markup.add(types.KeyboardButton('Количество поинтов')) markup.add(types.KeyboardButton('Время ожидания')) markup.add(types.KeyboardButton('Назад в меню')) bot.send_message(message.chat.id, 'Что вы хотите изменить?', reply_markup=markup) bot.register_next_step_handler(message, handle_settings_menu) def handle_settings_menu(message): if message.text == 'Количество поинтов': bot.send_message(message.chat.id, 'Введите минимальное и максимальное количество поинтов через пробел:') bot.register_next_step_handler(message, set_points_value) elif message.text == 'Время ожидания': bot.send_message(message.chat.id, 'Введите минимальное и максимальное время ожидания в секундах через пробел:') bot.register_next_step_handler(message, set_time_value) elif message.text == 'Назад в меню': main_menu(message) else: bot.send_message(message.chat.id, 'Пожалуйста, выберите "Количество поинтов" или "Время ожидания".') bot.register_next_step_handler(message, handle_settings_menu) def set_points_value(message): try: min_points, max_points = map(int, message.text.split()) user_data[message.chat.id]['MIN_POINTS'] = min_points user_data[message.chat.id]['MAX_POINTS'] = max_points bot.send_message(message.chat.id, f'Минимальное и максимальное количество поинтов установлены на {min_points} и {max_points} соответственно.') except Exception as e: bot.send_message(message.chat.id, f'Ошибка: {e}') main_menu(message) def set_time_value(message): try: min_time, max_time = map(int, message.text.split()) user_data[message.chat.id]['MIN_SLEEP_TIME'] = min_time user_data[message.chat.id]['MAX_SLEEP_TIME'] = max_time bot.send_message(message.chat.id, f'Минимальное и максимальное время ожидания установлены на {min_time} и {max_time} секунд соответственно.') except Exception as e: bot.send_message(message.chat.id, f'Ошибка: {e}') main_menu(message) def play_game(message): chat_id = message.chat.id blum_api = user_data[chat_id]['blum_api'] username = user_data[chat_id]['username'] bot.send_message(chat_id, f'Игры для {username} начинаются...') try: balance_data = blum_api.get_balance() available_balance, game_passes = float(balance_data.get('availableBalance')), balance_data.get('playPasses') bot.send_message(chat_id, f'Баланс: {available_balance}\nДоступные игры: {game_passes}') bot.send_message(chat_id, 'Введите количество игр, которые вы хотите сыграть:') bot.register_next_step_handler(message, process_games_count, available_balance, game_passes) except Exception as e: bot.send_message(chat_id, f'Ошибка: {e}') def process_games_count(message, available_balance, game_passes): chat_id = message.chat.id try: games_count = int(message.text) if 0 < games_count <= game_passes: for game_number in range(1, games_count + 1): bot.send_message(chat_id, f'Игра номер {game_number} начата.') response = user_data[chat_id]['blum_api'].play_game() game_id = response.get('gameId') min_points = user_data[chat_id].get('MIN_POINTS', MIN_POINTS) max_points = user_data[chat_id].get('MAX_POINTS', MAX_POINTS) points = random.randrange(min_points, max_points) min_sleep_time = user_data[chat_id].get('MIN_SLEEP_TIME', MIN_SLEEP_TIME) max_sleep_time = user_data[chat_id].get('MAX_SLEEP_TIME', MAX_SLEEP_TIME) sleep_time = random.randrange(min_sleep_time, max_sleep_time) time.sleep(sleep_time) user_data[chat_id]['blum_api'].claim_reward(game_id, points) available_balance += points bot.send_message(chat_id, f'Игра номер {game_number} завершена.\nID игры: {game_id}\nВы получили {points} поинтов.\nБаланс: {available_balance}') time.sleep(1) markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True) markup.add(types.KeyboardButton('Начать заново')) bot.send_message(chat_id, 'Все игры завершены.', reply_markup=markup) bot.register_next_step_handler(message, handle_restart) else: bot.send_message(chat_id, 'Введите допустимое количество игр.') bot.register_next_step_handler(message, process_games_count, available_balance, game_passes) except Exception as e: bot.send_message(chat_id, f'Ошибка: {e}') bot.register_next_step_handler(message, process_games_count, available_balance, game_passes) def handle_restart(message): if message.text == 'Начать заново': main_menu(message) else: bot.send_message(message.chat.id, 'Пожалуйста, выберите "Начать заново".') bot.register_next_step_handler(message, handle_restart) bot.polling(none_stop=True) Python import random import time import logging import requests import telebot from telebot import types # Telegram bot token TOKEN = "TOKEN_BOT" # Enable logging logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO ) logger = logging.getLogger(__name__) # API URLs URL_ME = "https://gateway.blum.codes/v1/user/me" URL_BALANCE = "https://game-domain.blum.codes/api/v1/user/balance" URL_PLAY_GAME = "https://game-domain.blum.codes/api/v1/game/play" URL_CLAIM_REWARD = "https://game-domain.blum.codes/api/v1/game/claim" # Constants MIN_POINTS = 152 MAX_POINTS = 184 MIN_SLEEP_TIME = 28 MAX_SLEEP_TIME = 35 # Initialize bot with your token bot = telebot.TeleBot(TOKEN) class InvalidToken(Exception): pass class BlumAPI: def __init__(self, authorization_token) -> None: self.headers = { 'Authorization': authorization_token } def request(self, request_method, url, payload=None): response = getattr(requests, request_method)(url, headers=self.headers, data=payload) if response.status_code == 401: raise InvalidToken(response.text) return response def get_me(self): response = self.request('get', URL_ME) if not response.ok: raise Exception(f'Проблема при получении имени пользователя!\nТекст ошибки с сервера: {response.text}') return response.json() def get_balance(self): response = self.request('get', URL_BALANCE) if not response.ok: raise Exception(f'Проблема при получении баланса!\nТекст ошибки с сервера: {response.text}') return response.json() def play_game(self): response = self.request('post', URL_PLAY_GAME) if not response.ok: raise Exception(f'При попытке сыграть в игру произошла ошибка!\nТекст ошибки с сервера: {response.text}') return response.json() def claim_reward(self, game_id: str, points: int): payload = {'gameId': game_id, 'points': points} response = self.request('post', URL_CLAIM_REWARD, payload=payload) if not response.ok: raise Exception(f'При попытке собрать награду произошла ошибка!\nТекст ошибки с сервера: {response.text}') # User data storage user_data = {} @bot.message_handler(commands=['start']) def start(message): user_data[message.chat.id] = {} bot.send_message(message.chat.id, 'Введите токен авторизации Blum:') bot.register_next_step_handler(message, get_auth) def get_auth(message): user_data[message.chat.id]['token'] = message.text try: blum_api = BlumAPI(user_data[message.chat.id]['token']) username = blum_api.get_me().get('username') user_data[message.chat.id]['blum_api'] = blum_api user_data[message.chat.id]['username'] = username main_menu(message) except InvalidToken as e: bot.send_message(message.chat.id, f'Ошибка с токеном: {e}') bot.register_next_step_handler(message, get_auth) except Exception as e: bot.send_message(message.chat.id, f'Ошибка: {e}') bot.register_next_step_handler(message, get_auth) def main_menu(message): markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True) markup.add(types.KeyboardButton('Играть')) markup.add(types.KeyboardButton('Изменить настройки')) bot.send_message(message.chat.id, f'Привет, {user_data[message.chat.id]["username"]}! Что вы хотите сделать?', reply_markup=markup) bot.register_next_step_handler(message, handle_main_menu) def handle_main_menu(message): if message.text == 'Играть': play_game(message) elif message.text == 'Изменить настройки': settings_menu(message) else: bot.send_message(message.chat.id, 'Пожалуйста, выберите "Играть" или "Изменить настройки".') bot.register_next_step_handler(message, handle_main_menu) def settings_menu(message): markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True) markup.add(types.KeyboardButton('Количество поинтов')) markup.add(types.KeyboardButton('Время ожидания')) markup.add(types.KeyboardButton('Назад в меню')) bot.send_message(message.chat.id, 'Что вы хотите изменить?', reply_markup=markup) bot.register_next_step_handler(message, handle_settings_menu) def handle_settings_menu(message): if message.text == 'Количество поинтов': bot.send_message(message.chat.id, 'Введите минимальное и максимальное количество поинтов через пробел:') bot.register_next_step_handler(message, set_points_value) elif message.text == 'Время ожидания': bot.send_message(message.chat.id, 'Введите минимальное и максимальное время ожидания в секундах через пробел:') bot.register_next_step_handler(message, set_time_value) elif message.text == 'Назад в меню': main_menu(message) else: bot.send_message(message.chat.id, 'Пожалуйста, выберите "Количество поинтов" или "Время ожидания".') bot.register_next_step_handler(message, handle_settings_menu) def set_points_value(message): try: min_points, max_points = map(int, message.text.split()) user_data[message.chat.id]['MIN_POINTS'] = min_points user_data[message.chat.id]['MAX_POINTS'] = max_points bot.send_message(message.chat.id, f'Минимальное и максимальное количество поинтов установлены на {min_points} и {max_points} соответственно.') except Exception as e: bot.send_message(message.chat.id, f'Ошибка: {e}') main_menu(message) def set_time_value(message): try: min_time, max_time = map(int, message.text.split()) user_data[message.chat.id]['MIN_SLEEP_TIME'] = min_time user_data[message.chat.id]['MAX_SLEEP_TIME'] = max_time bot.send_message(message.chat.id, f'Минимальное и максимальное время ожидания установлены на {min_time} и {max_time} секунд соответственно.') except Exception as e: bot.send_message(message.chat.id, f'Ошибка: {e}') main_menu(message) def play_game(message): chat_id = message.chat.id blum_api = user_data[chat_id]['blum_api'] username = user_data[chat_id]['username'] bot.send_message(chat_id, f'Игры для {username} начинаются...') try: balance_data = blum_api.get_balance() available_balance, game_passes = float(balance_data.get('availableBalance')), balance_data.get('playPasses') bot.send_message(chat_id, f'Баланс: {available_balance}\nДоступные игры: {game_passes}') bot.send_message(chat_id, 'Введите количество игр, которые вы хотите сыграть:') bot.register_next_step_handler(message, process_games_count, available_balance, game_passes) except Exception as e: bot.send_message(chat_id, f'Ошибка: {e}') def process_games_count(message, available_balance, game_passes): chat_id = message.chat.id try: games_count = int(message.text) if 0 < games_count <= game_passes: for game_number in range(1, games_count + 1): bot.send_message(chat_id, f'Игра номер {game_number} начата.') response = user_data[chat_id]['blum_api'].play_game() game_id = response.get('gameId') min_points = user_data[chat_id].get('MIN_POINTS', MIN_POINTS) max_points = user_data[chat_id].get('MAX_POINTS', MAX_POINTS) points = random.randrange(min_points, max_points) min_sleep_time = user_data[chat_id].get('MIN_SLEEP_TIME', MIN_SLEEP_TIME) max_sleep_time = user_data[chat_id].get('MAX_SLEEP_TIME', MAX_SLEEP_TIME) sleep_time = random.randrange(min_sleep_time, max_sleep_time) time.sleep(sleep_time) user_data[chat_id]['blum_api'].claim_reward(game_id, points) available_balance += points bot.send_message(chat_id, f'Игра номер {game_number} завершена.\nID игры: {game_id}\nВы получили {points} поинтов.\nБаланс: {available_balance}') time.sleep(1) markup = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True) markup.add(types.KeyboardButton('Начать заново')) bot.send_message(chat_id, 'Все игры завершены.', reply_markup=markup) bot.register_next_step_handler(message, handle_restart) else: bot.send_message(chat_id, 'Введите допустимое количество игр.') bot.register_next_step_handler(message, process_games_count, available_balance, game_passes) except Exception as e: bot.send_message(chat_id, f'Ошибка: {e}') bot.register_next_step_handler(message, process_games_count, available_balance, game_passes) def handle_restart(message): if message.text == 'Начать заново': main_menu(message) else: bot.send_message(message.chat.id, 'Пожалуйста, выберите "Начать заново".') bot.register_next_step_handler(message, handle_restart) bot.polling(none_stop=True) 2. После надо установить модули для правильной работы бота, заходим в cmd и прописывайте следующую команду pip install requests pyTelegramBotAPI Код pip install requests pyTelegramBotAPI 3. В той же консоли пропишите команду для запуска скрипта (не забудьте перейти в директорию со скриптом) py main.py Код py main.py Получаем свой код blum для фарма 1. Заходим в настройки в телеграмме, и нажимаем на продвинутые настройки 2. Листаем в самый низ и заходим в "Экспериментальные настройки" и ищем там "Enable wevbiew inspecting" и включаем его 3. Заходим в blum и ПКМ на пустую область,и выбираем проверить 4. Выбираем данный значок 5. В списке появиться много запросов, нам нужен любой XHR запрос 6. После нажатия на такой запрос справа появиться колонка с заголовками, листайте пока не найдете заголовок Authorization 7.токен будет в таком формате, скопируйте его полностью (с Bearer) Переходим к фарму 1. Переходим в бота которого создали и нажимаем /start и вставляем токен который скопировали 2. Нажимаем кнопку "Играть" и выбираем сколько игр хотим сыграть. На этом всё! Если все правильно сделали, то всё должно работать Сидим зарабатываем баллы и наслаждаемся жизнью Если будут вопросы, пишите буду отвечать на них Спасибо за прочтение
АртёмДзюба, приветствую тебя лошара)) блум ебашит) листинг уже скоро)) а ты хуй соси со своим скамом окей:())
По какой причине делает 1-3 игры и потом выдает ошибку? Ошибка: При попытке собрать награду произошла ошибка! Текст ошибки с сервера: {"message":"game session not finished"}
Ошибка: Проблема при получении имени пользователя! Текст ошибки с сервера: {"code":5, "message":"Not Found", "details":[]}