Гайд - Бот - Cкрипт бота для создание QR-code | End Way - форум программирования и сливов различных скриптов
  • Присоединяйтесь к нам в телеграм канал! EndWay канал | EndSoft канал | EWStudio канал
  • Хочешь поставить скрипт, но не умеешь?
    А может ты хочешь свой скрипт на основе слитого?

    Тогда добро пожаловать в нашу студию разработки!

    Телеграм бот: EWStudioBot
    Телеграм канал: EWStudio

Гайд Бот Cкрипт бота для создание QR-code

UserGoD

Бот
Автор темы
15 Сен 2023
79
149
0
1700638794788Доброго времени суток эндвеевцы, сегодня покажу интересный скрипт и расскажу как его запустить. Данный скрипт интересен тем, что можно ссылку или текст впихнуть в QR-код, тем самым в дальнейшем с ним работать. В боте эта функция корень всего бота, я бы ее на самом деле впили бы как второстепенную функцию в боте-помощнике.

ЯП: Python3.7+
Зависимости:

  • aiogram==2.25.1
  • qrcode==7.4.2

Базы так таковой нет, но можно делать цветные qr-коды, что на самом деле забавно, можно углубиться в библиотеку qrcode и помимо цвета менять еще внешний вид QR.

Так как же установить?
Все просто, у нас на компьютере или же сервере должен быть установлен python 3.7+ (я использую 3.8.9).
Так же вам необходимо установить зависимости, такими командами:

pip install aiogram==2.25.1
pip install qrcode==7.4.2

Далее создаем файл с расширением .py (к примеру bot.py) и вставляем туда этот код и на 9 строке кода указать ваш токен бота из botfather:
bot.py:
import logging
import asyncio
import qrcode
import random
from io import BytesIO
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware

API_TOKEN = ''

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
dp.middleware.setup(LoggingMiddleware())

logging.basicConfig(level=logging.INFO)

user_data = {}

available_colors = ['black', 'red', 'blue', 'green', 'yellow',
                    'orange', 'purple', 'pink', 'brown', 'gray',
                    'cyan', 'lime', 'teal', 'indigo', 'violet',
                    'magenta', 'gold', 'silver', 'navy']


@dp.message_handler(commands=['start'])
async def cmd_start(message: types.Message):
    await message.answer("Привет! Я бот для создания QR-кодов. Пожалуйста, отправьте текст или ссылку для генерации QR-кода. "
                         "Вы также можете использовать команду /help для получения справки.")


@dp.message_handler(commands=['help'])
async def cmd_help(message: types.Message):
    help_text = "С помощью этого бота вы можете создавать QR-коды из текста или ссылок и настраивать цвета QR-кода.\n\n" \
                "Чтобы создать QR-код, просто отправьте мне текст или ссылку. " \
                "Для настройки цвета заполнения QR-кода используйте команду /color."
    await message.answer(help_text)


@dp.message_handler(lambda message: message.text and not message.text.startswith('/'))
async def generate_qr_from_text(message: types.Message):
    text = message.text
    fill_color = random.choice(available_colors)
    qr_code = create_qr_code(text, fill_color)
    await send_qr_code(message, qr_code)


@dp.message_handler(commands=['color'])
async def set_fill_color(message: types.Message):
    color = random.choice(available_colors)
    user_id = message.from_user.id
    user_data[user_id] = {'fill_color': color}
    await message.answer(f"Цвет заполнения QR-кода установлен на {color}")


def create_qr_code(text: str, fill_color: str) -> BytesIO:
    back_color = 'white'
   
    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )
    qr.add_data(text)
    qr.make(fit=True)

    qr_img = qr.make_image(fill_color=fill_color, back_color=back_color)
    buffer = BytesIO()
    qr_img.save(buffer)
    buffer.seek(0)
    return buffer


async def send_qr_code(message: types.Message, qr_code: BytesIO):
    await message.answer_photo(photo=types.InputFile(qr_code))

if __name__ == '__main__':
    from aiogram import executor
    loop = asyncio.get_event_loop()
    executor.start_polling(dp, loop=loop, skip_updates=True)
 
Like
  • 1
Реакции: 1 user
Активность:
Пока что здесь никого нет