2023-01-12 06:37:56 +02:00
import json
import requests
import io
2023-03-18 00:04:54 +02:00
import os
2023-01-12 06:37:56 +02:00
import random
import base64
2023-03-18 00:04:54 +02:00
from PIL import Image , PngImagePlugin
from pyrogram import Client , filters
from pyrogram . types import *
2023-03-18 00:24:46 +02:00
from dotenv import load_dotenv
2023-03-18 00:04:54 +02:00
# Done! Congratulations on your new bot. You will find it at
# t.me/gootmornbot
# You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
# Use this token to access the HTTP API:
# Keep your token secure and store it safely, it can be used by anyone to control your bot.
# For a description of the Bot API, see this page: https://core.telegram.org/bots/api
2023-01-12 06:37:56 +02:00
2023-03-18 00:24:46 +02:00
load_dotenv ( )
2023-01-12 06:37:56 +02:00
API_ID = os . environ . get ( " API_ID " , None )
API_HASH = os . environ . get ( " API_HASH " , None )
TOKEN = os . environ . get ( " TOKEN " , None )
2023-03-18 00:04:54 +02:00
SD_URL = os . environ . get ( " SD_URL " , None )
print ( SD_URL )
app = Client (
2023-01-12 06:37:56 +02:00
" stable " ,
api_id = API_ID ,
api_hash = API_HASH ,
bot_token = TOKEN
)
2023-03-18 00:04:54 +02:00
2023-01-12 06:37:56 +02:00
@app.on_message ( filters . command ( [ " draw " ] ) )
def draw ( client , message ) :
msgs = message . text . split ( ' ' , 1 )
if len ( msgs ) == 1 :
2023-03-18 00:04:54 +02:00
message . reply_text ( " Format : /draw < text to image > " )
2023-01-12 06:37:56 +02:00
return
msg = msgs [ 1 ]
K = message . reply_text ( " Please Wait 10-15 Second " )
payload = { " prompt " : msg }
r = requests . post ( url = f ' { SD_URL } /sdapi/v1/txt2img ' , json = payload ) . json ( )
2023-03-18 00:24:46 +02:00
# explaination
def genr ( ) :
2023-03-18 00:04:54 +02:00
chars = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
chars1 = " 1234564890 "
gen1 = random . choice ( chars )
gen2 = random . choice ( chars )
gen3 = random . choice ( chars1 )
gen4 = random . choice ( chars )
gen5 = random . choice ( chars )
gen6 = random . choice ( chars )
gen7 = random . choice ( chars1 )
gen8 = random . choice ( chars )
gen9 = random . choice ( chars )
gen10 = random . choice ( chars1 )
return f " { message . from_user . id } -MOE { gen1 } { gen2 } { gen3 } { gen4 } { gen5 } { gen6 } { gen7 } { gen8 } { gen9 } { gen10 } "
word = genr ( )
2023-01-12 06:37:56 +02:00
for i in r [ ' images ' ] :
image = Image . open ( io . BytesIO ( base64 . b64decode ( i . split ( " , " , 1 ) [ 0 ] ) ) )
png_payload = { " image " : " data:image/png;base64, " + i }
2023-03-18 00:04:54 +02:00
response2 = requests . post ( url = f ' { SD_URL } /sdapi/v1/png-info ' ,
2023-01-12 06:37:56 +02:00
json = png_payload )
pnginfo = PngImagePlugin . PngInfo ( )
pnginfo . add_text ( " parameters " , response2 . json ( ) . get ( " info " ) )
image . save ( f ' { word } .png ' , pnginfo = pnginfo )
message . reply_photo (
photo = f " { word } .png " ,
caption =
2023-03-18 00:04:54 +02:00
f " Prompt - ** { msg } ** \n **[ { message . from_user . first_name } -Kun](tg://user?id= { message . from_user . id } )** "
2023-01-12 06:37:56 +02:00
)
os . remove ( f " { word } .png " )
K . delete ( )
2023-03-18 00:24:46 +02:00
2023-03-18 00:04:54 +02:00
@app.on_message ( filters . command ( [ " getmodels " ] ) )
async def get_models ( client , message ) :
response = requests . get ( url = f ' { SD_URL } /sdapi/v1/sd-models ' )
if response . status_code == 200 :
models_json = response . json ( )
# create buttons for each model name
buttons = [ ]
for model in models_json :
buttons . append ( [ InlineKeyboardButton ( model [ ' title ' ] , callback_data = model [ ' model_name ' ] ) ] )
# send the message
await message . reply_text (
text = " Select a model [checkpoint] to use " ,
reply_markup = InlineKeyboardMarkup ( buttons )
)
@app.on_callback_query ( )
async def process_callback ( client , callback_query ) :
# if a model button is clicked, set sd_model_checkpoint to the selected model's title
sd_model_checkpoint = callback_query . data
# The sd_model_checkpoint needs to be set to the title from /sdapi/v1/sd-models
# post using /sdapi/v1/options
options = {
" sd_model_checkpoint " : sd_model_checkpoint
}
# post the options
response = requests . post ( url = f ' { SD_URL } /sdapi/v1/options ' , json = options )
if response . status_code == 200 :
# if the post was successful, send a message
await callback_query . message . reply_text ( " checpoint set to " + sd_model_checkpoint )
else :
# if the post was unsuccessful, send an error message
await callback_query . message . reply_text ( " Error setting options " )
2023-03-18 00:24:46 +02:00
2023-01-12 06:37:56 +02:00
@app.on_message ( filters . command ( [ " start " ] , prefixes = [ " / " , " ! " ] ) )
async def start ( client , message ) :
2023-03-18 00:04:54 +02:00
# Photo = "https://i.imgur.com/79hHVX6.png"
2023-01-12 06:37:56 +02:00
buttons = [ [
InlineKeyboardButton ( " Add to your group " ,
2023-03-18 00:04:54 +02:00
url = " https://t.me/gootmornbot?startgroup=true " )
2023-01-12 06:37:56 +02:00
] ]
2023-03-18 00:04:54 +02:00
await message . reply_text (
# photo=Photo,
text =
f " Hello! \n ask me to imagine anything \n \n /draw text to image " ,
reply_markup = InlineKeyboardMarkup ( buttons )
)
2023-01-12 06:37:56 +02:00
app . run ( )