После ввода токена, при нажатие на enter, cmd просто закрывается, в чем проблема? До этого, работало гуд
Привет! Использую скрипт пару недель, всё отлично Есть пара несущественных моментов, например иногда , ак писали выше вылетает командная срока сразу после ввода токена, но это думаю из-за глюков системы, перезагрузка помогает, повторюсь, это происходит довольно редко. Иногда неверно прогружает баланс или неверно начисляет баллы, непонятно, отличаются показания в командной строке и в окне Блума, но тоже не особо критично. (скрины приложу) Есть предложение, сделать ожидание не ровно 35 секунд, а тоже рандомное время поставить от 32 до 40 секунд, мне кажется подозрительно, что каждый раз ровно в одно и тоже время отправляются очки на сервер (хотя может я ошибаюсь, в Питоне вообще полный ноль, только чат ГПТ помогает кое что подправить) Кстати сделал из скрипта EXEшник и теперь он работает без необходимости устанавливать Питон, запускать командную строку и прописывать в ней адрес к скрипту, после запуска EXEшника сразу открывается окно командной строки и просит ввести токен. Ещё иконку Блума к нему прикрутил )))) Так же я в скрипте уменьшил кол-во очков 146-216 поставил на всякий случай, я руками максимум 220 набивал при помощи специальных возможностей Apple )))))) , хоть для чего-то они пригодились.
Pooh81, очень рад что мой скрипт вдохновил тебя на творчество и модификацию того что я написал, возможно для тебя это станет первым шагом в мир разработки :)) такой вопрос, у тебя старая или новая версия скрипта? дело в том что я делал небольшой апдейт в котором вроде как пофиксил отображение баланса и добавил две константы с минимальным и максимальны количеством получаемых поинтов. абсолютно точной синхронизации с реальным балансом после игр и балансом который отображается в окне блюм добиться невозможно, потому что в самом блюме оно отображается через какое то время, и людей это настораживает что мини-игры прошли, поинты вроде как получились, а баланс в самом окне не отображается, хотя просто стоит чуть чуть подождать :)) насчет экзешника, здорово что ты упростил себе задачу и создал экзешник под это дело! но я не стал так делать т.к многие люди не доверяют незнакомым файлам в интернете и это нормально. я бы сам не стал никогда запускать какой то левый исполняемый файл от человека которого я первый раз на формуе вижу. по этой причине и сделал скрипт что бы все было прозрачно и каждый мог убедиться что ничего страшного в программе не происходит. большое спасибо что поделился своим фидбеком о работе со скриптом
clownery, версия скрипта новая, да я знаю что поинты с задержкой приходят, но повторюсь - это не критично, главное под бритву не попасть )))) А что со временем в 35 секунд? поправишь или смысла нет?
Pooh81, а насчет времени забыл упомянуть да на самом деле было бы неплохо, чуть позже добавлю еще две константы в скрипт которые влияют на задержку между слипом, это хорошая идея спасибо тебе за предложение
kiberbylo4ka, сейчас кручу, всё работает в лучшем виде и с рандомными секундами зачисления поинтов теперь! Шансов "побриться" стало ещё чуточку меньше ))))) Ещё вот этой командой pyinstaller --onefile "Ваше название".py можно сделать .EXEшник из скрипта и не нужно каждый раз запускать командную строку, она сама стартует и сразу просит ввести токен
kiberbylo4ka, ну обнова обновой, методы взаимодействия клиента с сервером не поменялись ведь, поменяли исключительно визаул
UPD 05.07.24: Немного обновил скрипт и добавил две константы MIN_SLEEP_TIME и MAX_SLEEP_TIME которые добавляют рандомизацию для задержки между играми
Список ожидания приостановлен Слишком много людей в очереди. Мы приостановили работу, чтобы обеспечить бесперебойную работу приложения. что делать тепер мне
все ку,доработал код что бы он был в виде бота для телеграмма 1.для установки надо pip install requests pyTelegramBotAPI Python pip install requests pyTelegramBotAPI 2.сам код 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) Если будут вопросы,пишите!
molant, да если честно, я не сразу понял что надо через БОТФазера создавать бота, из-за этого и ошибки я думаю напиши инструкцию, если не сложно, что и как я вот, взял код автора статьи и чуть переделал его тоже немного завернул его в ехешник и пользуюсь 2 недели+ долго мучал ChatGPT ))))
molant, привет, давно не заходил в свой тред, и удивился когда увидел твой код, очень похвально +rep я очень рад что мой скрипт вдохновил тебя на творчество и усовершенствования, это всегда приветствуется :)) жду от тебя отдельной статьи ;D
FixEEERKing, привет, ну с помощью multiprocessing можешь сам дописать что бы у тебя в несколько потоков шли запросы, но я не уверен что это хорошая затея, думаю могут забанить если одновременно много запросов на мини-игру посылать...
Есть такая проблемка. Скрипт может открутить подряд и 100 игр и 10 и потом отваливается. Ошибка. Надо обновлять токен и всё по новой. Это у меня только так?
farg32, Сессия не бесконечная, через какое то время токен меняется на новый, это вполне естественный процесс.
Ошибка: При попытке собрать награду произошла ошибка! Текст ошибки с сервера: {"message":"game session not finished"} Это очень часто вылазит
ERROR! При попытке сыграть в игру произошла ошибка! Текст ошибки с сервера: {"message":"cannot start game"} что делать?