File size: 4,408 Bytes
056f521
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# CREATED BY: https://t.me/O_oKarma
# API CREDITS: @Qewertyy
# PROVIDED BY: https://github.com/Team-ProjectCodeX

# <============================================== IMPORTS =========================================================>
import asyncio

import aiohttp
from telethon import events

from Mikobot import tbot as client

# <=======================================================================================================>

BASE_URL = "https://lexica.qewertyy.dev"
SESSION_HEADERS = {"Host": "lexica.qewertyy.dev"}


# <=============================================== CLASS + FUNCTION ========================================================>
class AsyncClient:
    def __init__(self):
        self.url = BASE_URL
        self.session = aiohttp.ClientSession()

    async def generate(self, model_id, prompt, negative_prompt):
        data = {
            "model_id": model_id,
            "prompt": prompt,
            "negative_prompt": negative_prompt if negative_prompt else "",
            "num_images": 1,
        }
        try:
            async with self.session.post(
                f"{self.url}/models/inference", data=data, headers=SESSION_HEADERS
            ) as resp:
                return await resp.json()
        except Exception as e:
            print(f"Request failed: {str(e)}")

    async def get_images(self, task_id, request_id):
        data = {"task_id": task_id, "request_id": request_id}
        try:
            async with self.session.post(
                f"{self.url}/models/inference/task", data=data, headers=SESSION_HEADERS
            ) as resp:
                return await resp.json()
        except Exception as e:
            print(f"Request failed: {str(e)}")


async def generate_image_handler(event, model_id):
    command_parts = event.text.split(" ", 1)
    if len(command_parts) < 2:
        await event.reply("Please provide a prompt.")
        return

    prompt = command_parts[1]
    negative_prompt = ""

    # Send the initial "Generating your image, wait sometime" message
    reply_message = await event.reply("Generating your image, please wait...")

    client = AsyncClient()
    response = await client.generate(model_id, prompt, negative_prompt)
    task_id = response["task_id"]
    request_id = response["request_id"]

    while True:
        generated_images = await client.get_images(task_id, request_id)

        if "img_urls" in generated_images:
            for img_url in generated_images["img_urls"]:
                # Delete the initial reply message
                await reply_message.delete()

                # Send the generated image
                await event.reply(file=img_url)
            break  # Exit the loop when images are available
        else:
            # Wait for a few seconds before checking again
            await asyncio.sleep(5)

        # Optionally, you can add a timeout to avoid an infinite loop
        timeout_seconds = 600  # 10 minutes (adjust as needed)
        if timeout_seconds <= 0:
            await reply_message.edit("Image generation timed out.")
            break

        timeout_seconds -= 5  # Decrement timeout by 5 seconds


@client.on(events.NewMessage(pattern=r"/meinamix"))
async def meinamix_handler(event):
    await generate_image_handler(event, model_id=2)


@client.on(events.NewMessage(pattern=r"/sushi"))
async def darksushi_handler(event):
    await generate_image_handler(event, model_id=7)


@client.on(events.NewMessage(pattern=r"/meinahentai"))
async def meinahentai_handler(event):
    await generate_image_handler(event, model_id=8)


@client.on(events.NewMessage(pattern=r"/darksushimix"))
async def darksushimix_handler(event):
    await generate_image_handler(event, model_id=9)


@client.on(events.NewMessage(pattern=r"/anylora"))
async def anylora_handler(event):
    await generate_image_handler(event, model_id=3)


@client.on(events.NewMessage(pattern=r"/cetusmix"))
async def cetusmix_handler(event):
    await generate_image_handler(event, model_id=10)


@client.on(events.NewMessage(pattern=r"/darkv2"))
async def darkv_handler(event):
    await generate_image_handler(event, model_id=14)


@client.on(events.NewMessage(pattern=r"/creative"))
async def creative_handler(event):
    await generate_image_handler(event, model_id=12)


# <================================================ END =======================================================>