@Sanic1

Как сделать, чтобы по запросу бот отправлял картинку с рандомными числами?

Создаю бота по предиктам, нужно, чтобы бот отправлял коэффициенты на определенной картинке, то есть каждый раз разные, пользователь нажимает на кнопку след.коэф., он должен получать картинку и на этой картинке коэффициент, но каждый раз разный коэффициент. Я написал код, где бот отправляет картинку, но без коэффициента, он пишется текстом снизу картинки. Как сделать, чтобы коэффициенты привязанные к логике (видно, если посмотреть код ) отправлялись, то есть каждый раз разный коэф. должен быть.

Вот код.
import random
import sqlite3
import telebot
from telebot import types

# Подключение к Telegram API
bot = telebot.TeleBot('мой токен')

# Функция для генерации рандомного коэффициента
def generate_random_odd():
    # Логика для генерации коэффициента, как в вашем предыдущем коде
    rand = random.random()
    if rand < 0.5:
        return round(random.uniform(1.0, 2.0), 2)
    elif rand < 0.8:
        return round(random.uniform(2.0, 3.0), 2)
    elif rand < 0.9:
        return round(random.uniform(3.0, 8.0), 2)
    elif rand < 0.97:
        return round(random.uniform(8.0, 15.0), 2)
    elif rand < 0.99:
        return round(random.uniform(15.0, 50.0), 2)
    else:
        return round(random.uniform(50.0, 5000.0), 2)

# Функция для создания изображения с коэффициентом
def create_odd_image(odd):
    # Загрузка изображения background_image.jpg
    image = open('background_image.jpg', 'rb')
    return image

# Приветственное сообщение при запуске бота
@bot.message_handler(commands=['start'])
def start(message):
    bot.reply_to(message, 'Привет! Вы можете получить доступ к прогнозам. Нажмите кнопку "Получить коэффициент", чтобы начать.', reply_markup=get_odd_button())

# Клавиатура с кнопкой "Получить коэффициент"
def get_odd_button():
    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add('Получить коэффициент')
    return keyboard

# Обработка нажатия кнопки "Получить коэффициент"
@bot.message_handler(func=lambda message: message.text == 'Получить коэффициент')
def send_odd(message):
    # Генерация рандомного коэффициента
    odd = generate_random_odd()

    # Сохранение коэффициента в базе данных SQLite
    with sqlite3.connect('odds.db') as conn:
        cursor = conn.cursor()
        cursor.execute('INSERT INTO odds (odd) VALUES (?)', (odd,))
        conn.commit()

    # Отправка изображения с коэффициентом
    bot.send_photo(message.chat.id, create_odd_image(odd), caption=f'Ваш коэффициент: {odd}', reply_markup=next_odd_button())

# Функция для создания клавиатуры с кнопкой "Следующий коэффициент"
def next_odd_button():
    keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
    keyboard.add('Следующий коэффициент')
    return keyboard

# Обработка нажатия кнопки "Следующий коэффициент"
@bot.message_handler(func=lambda message: message.text == 'Следующий коэффициент')
def send_next_odd(message):
    # Получение последнего коэффициента из базы данных SQLite
    with sqlite3.connect('odds.db') as conn:
        cursor = conn.cursor()
        cursor.execute('SELECT odd FROM odds ORDER BY id DESC LIMIT 1')
        odd = cursor.fetchone()[0]

    # Генерация следующего рандомного коэффициента
    next_odd = generate_random_odd()

    # Отправка изображения с следующим коэффициентом
    bot.send_photo(message.chat.id, create_odd_image(next_odd), caption=f'Ваш следующий коэффициент: {next_odd}', reply_markup=next_odd_button())

# Подключение к базе данных SQLite и создание таблицы коэффициентов (если она не существует)
with sqlite3.connect('odds.db') as conn:
    cursor = conn.cursor()
    cursor.execute('''CREATE TABLE IF NOT EXISTS odds (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        odd REAL NOT NULL
    )''')
    conn.commit()

# Запуск бота
bot.polling()
  • Вопрос задан
  • 127 просмотров
Пригласить эксперта
Ответы на вопрос 1
66392dc829988434020298.png

Здравствуйте! Можете это реализовать следующим образом. Если я правильно понял, что вы ходите сделать. Я тут использовал Pillow и ImageDraw

Если хотите подробнее это изучить, то можете почитать в доке https://pillow.readthedocs.io/en/stable/reference/...

from PIL import Image, ImageDraw, ImageFont


def create_odd_image(odd):
    # Создание нового пустого изображения (белый фон)
    image = Image.new('RGB', (420, 100), color='white')

    # Создание объекта ImageDraw для рисования на изображении
    draw = ImageDraw.Draw(image)

    # Определение шрифта и его размера
    font = ImageFont.truetype("arial.ttf", 32)

    # Рисование текста на изображении
    draw.text((10, 10), f'Ваш коэффициент: {odd}', fill="black", font=font)

    # Сохранение измененного изображения
    image.save('odd_image.jpg')

    # Возвращаем открытое изображение
    return open('odd_image.jpg', 'rb')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы