diff --git a/.gitignore b/.gitignore
index 9c2653c..c7fcd1b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,4 +14,5 @@ __pycache__/
.idea
config.ini
unknown_errors.txt
+moonlogs.txt
.env
\ No newline at end of file
diff --git a/main.py b/main.py
index d2943d6..150d889 100644
--- a/main.py
+++ b/main.py
@@ -54,7 +54,11 @@ if config.STRINGSESSION:
app = Client("my_account", **common_params)
async def main():
- logging.basicConfig(level=logging.INFO)
+ logging.basicConfig(
+ format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
+ handlers=[logging.FileHandler("moonlogs.txt"), logging.StreamHandler()],
+ level=logging.INFO,
+ )
DeleteAccount.__new__ = None
try:
diff --git a/modules/aiutils.py b/modules/aiutils.py
index 84d36c6..200a997 100644
--- a/modules/aiutils.py
+++ b/modules/aiutils.py
@@ -10,9 +10,6 @@ from utils.config import vca_api_key
from utils.misc import modules_help, prefix
from utils.scripts import format_exc, import_library
-lexica = import_library("lexica", "lexica-api")
-from lexica import Client as lcl
-
api_url = "https://visioncraft.top"
async def fetch_models():
@@ -52,13 +49,7 @@ async def download_image(session, image_url, filename):
with open(filename, "wb") as f:
f.write(image_data)
-def upscale_request_lexica(image: bytes) -> bytes:
- """Request Maker Helper function to upscale image for Lexica API"""
- client = lcl()
- imageBytes = client.upscale(image)
- return imageBytes
-
-async def upscale_request_vc(api_key, image_data):
+async def upscale_request(api_key, image_data):
"""Request Maker Helper function to upscale image for VisionCraft API"""
image_base64 = base64.b64encode(image_data).decode('utf-8')
@@ -102,23 +93,19 @@ async def vdxl(c: Client, message: Message):
await message.edit_text("Please Wait...")
if len(message.command) > 2:
- model, prompt = message.text.split(maxsplit=2)[1:]
- if model not in models:
- await message.edit_text(f"Usage: {prefix}vdxl [model]* [prompt/reply to prompt]*\n Available Models:
{models}") - return + model, prompt = message.text.split(maxsplit=2)[1:] + if model not in models: + return await message.edit_text(f"Usage:
{prefix}vdxl [model]* [prompt/reply to prompt]*\n Available Models: {models}") elif message.reply_to_message and len(message.command) > 1: - model = message.text.split(maxsplit=1)[1] - if model in models: - prompt = message.reply_to_message.text - else: - await message.edit_text(f"Usage:
{prefix}vdxl [model]* [prompt/reply to prompt]*\n Available Models: {models}") - return - + model = message.text.split(maxsplit=1)[1] + if model in models: + prompt = message.reply_to_message.text + else: + return await message.edit_text(f"Usage:
{prefix}vdxl [model]* [prompt/reply to prompt]*\n Available Models: {models}") else: - await message.edit_text( + return await message.edit_text( f"Usage:
{prefix}vdxl [model]* [prompt/reply to prompt]*\n Available Models: {models}" ) - return data = { "prompt": prompt, @@ -243,27 +230,6 @@ async def vgif(c: Client, message: Message): except Exception as e: await message.edit_text(f"An error occurred: {format_exc(e)}") - -@Client.on_message(filters.command("lupscale", prefix) & filters.me) -async def lupscale(client: Client, message: Message): - """Upscale Image Using Lexica API""" - try: - photo_data = await message.download() - except ValueError: - try: - photo_data = await message.reply_to_message.download() - except ValueError: - await message.edit("File not found", parse_mode=enums.ParseMode.HTML) - return - await message.edit("
Processing...", parse_mode=enums.ParseMode.HTML)
- image = open(photo_data, 'rb').read()
- upscaled_image = upscale_request_lexica(image)
- with open('upscaled.png', 'wb') as f:
- f.write(upscaled_image)
- # await message.delete()
- await client.send_document(message.chat.id, 'upscaled.png', caption="Upscaled!", reply_to_message_id=message.id)
- os.remove('upscaled.png')
-
@Client.on_message(filters.command("upscale", prefix) & filters.me)
async def upscale(c: Client, message: Message):
"""Default Upscaler of Moon-Userbot: Uses VisionCraft APi"""
@@ -281,7 +247,7 @@ async def upscale(c: Client, message: Message):
api_key = vca_api_key
image = open(photo_data, 'rb').read()
- upscaled_image_data = await upscale_request_vc(api_key, image)
+ upscaled_image_data = await upscale_request(api_key, image)
with open('upscaled_image.png', 'wb') as file:
file.write(upscaled_image_data)
await i.delete()
@@ -320,6 +286,7 @@ async def whisp(message: Message):
except Exception as e:
await message.edit_text(f"An error occurred: {format_exc(e)}")
+
modules_help["aiutils"] = {
"vdxl [model]* [prompt/reply to prompt]*": "Text to Image with SDXL model",
"vgif [prompt/reply to prompt]*": "Text to GIF",
diff --git a/modules/lexica.py b/modules/lexica.py
new file mode 100644
index 0000000..8648cb7
--- /dev/null
+++ b/modules/lexica.py
@@ -0,0 +1,82 @@
+import os
+import requests
+
+from pyrogram import Client, filters
+from pyrogram.types import Message
+
+from utils.misc import modules_help, prefix
+from utils.scripts import format_exc
+from utils.lexicapi import ImageGeneration, UpscaleImages, ImageModels
+
+@Client.on_message(filters.command("lupscale", prefix) & filters.me)
+async def lupscale(client: Client, message: Message):
+ """Upscale Image Using Lexica API"""
+
+ await message.edit("Processing...")
+ try:
+ photo_data = await message.download()
+ except ValueError:
+ try:
+ photo_data = await message.reply_to_message.download()
+ except ValueError:
+ await message.edit("File not found")
+ return
+ try:
+ image = open(photo_data, 'rb').read()
+ upscaled_image = UpscaleImages(image)
+ if message.reply_to_message:
+ message_id = message.reply_to_message.id
+ await message.delete()
+ else:
+ message_id = message.id
+ await client.send_document(message.chat.id, upscaled_image, caption="Upscaled!", reply_to_message_id=message_id)
+ os.remove(upscaled_image)
+ except Exception as e:
+ await message.edit(format_exc(e))
+
+@Client.on_message(filters.command("lgen", prefix) & filters.me)
+async def lgen(client: Client, message: Message):
+ try:
+ await message.edit_text("Processing...")
+
+ models = ImageModels()
+ models_ids = models.values()
+
+ if len(message.command) > 2:
+ model_id = int(message.text.split()[1])
+ if model_id not in models_ids:
+ return await message.edit_text(f"Usage: {prefix}lgen [model_id]* [prompt/reply to prompt]*\n Available Models and IDs: {models}") + message_id = None + prompt = ''.join(message.text.split()[2:]) + elif message.reply_to_message and len(message.command) > 1: + model_id = int(message.text.split()[1]) + if model_id not in models_ids: + return await message.edit_text(f"Usage:
{prefix}lgen [model_id]* [prompt/reply to prompt]*\n Available Models and IDs: {models}") + message_id = message.reply_to_message.id + prompt = message.reply_to_message.text + else: + return await message.edit_text(f"Usage:
{prefix}lgen [model_id]* [prompt/reply to prompt]*\n Available Models and IDs: {models}") + + for key, val in models.items(): + if val == model_id: + model_name = key + + img = await ImageGeneration(model_id, prompt) + if img is None or img == 1 or img == 2: + return await message.edit_text("Something went wrong!") + elif img == 69: + return await message.edit_text("NSFW is not allowed") + else: + img_url = img[0] + with open("generated_image.png", 'wb') as f: + f.write(requests.get(img_url, timeout=5).content) + + await client.send_document(message.chat.id, "generated_image.png", caption=f"Prompt:
{prompt}\nModel: {model_name}", reply_to_message_id=message_id)
+ os.remove("generated_image.png")
+ except Exception as e:
+ await message.edit(format_exc(e))
+
+modules_help["lexica"] = {
+ "lgen [model_id]* [prompt/reply to prompt]*": "Generate Image with Lexica API",
+ "lupscale [cap/reply to image]*": "Upscale Image through Lexica API",
+}
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index 9e97032..22a1eb0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -19,4 +19,5 @@ beautifulsoup4
aiohttp
aiofiles
rentry
-pySmartDL
\ No newline at end of file
+pySmartDL
+lexica-api
\ No newline at end of file
diff --git a/utils/db.py b/utils/db.py
index 0d58422..b30a2cc 100644
--- a/utils/db.py
+++ b/utils/db.py
@@ -17,13 +17,13 @@
import re
import json
import threading
-import dns.resolver
-import pymongo
import sqlite3
+from dns import resolver
+import pymongo
from utils import config
-dns.resolver.default_resolver = dns.resolver.Resolver(configure=False)
-dns.resolver.default_resolver.nameservers = ["8.8.8.8"]
+resolver.default_resolver = resolver.Resolver(configure=False)
+resolver.default_resolver.nameservers = ["1.1.1.1"]
class Database:
diff --git a/utils/lexicapi.py b/utils/lexicapi.py
new file mode 100644
index 0000000..d8894d5
--- /dev/null
+++ b/utils/lexicapi.py
@@ -0,0 +1,55 @@
+# Copyright 2023 Qewertyy, MIT License
+import logging
+import asyncio
+from lexica import AsyncClient, Client
+
+def ImageModels():
+ client = Client()
+ models = Client().models['models']['image']
+ dict_models = {}
+ for model in models:
+ model_id = model['id']
+ model_name = model['name']
+ dict_models[model_name] = model_id
+ return dict_models
+
+async def ImageGeneration(model,prompt):
+ try:
+ client = AsyncClient()
+ output = await client.generate(model,prompt,"")
+ if output['code'] != 1:
+ return 2
+ elif output['code'] == 69:
+ return output['code']
+ task_id, request_id = output['task_id'],output['request_id']
+ await asyncio.sleep(20)
+ tries = 0
+ image_url = None
+ resp = await client.getImages(task_id,request_id)
+ while True:
+ if resp['code'] == 2:
+ image_url = resp['img_urls']
+ break
+ if tries > 15:
+ break
+ await asyncio.sleep(5)
+ resp = await client.getImages(task_id,request_id)
+ tries += 1
+ continue
+ return image_url
+ except Exception as e:
+ logging.warn(f"Failed to generate the image:",e)
+ finally:
+ await client.close()
+
+async def UpscaleImages(image: bytes) -> str:
+ """
+ Upscales an image and return with upscaled image path.
+ """
+ client = AsyncClient()
+ content = await client.upscale(image)
+ await client.close()
+ upscaled_file_path = "upscaled.png"
+ with open(upscaled_file_path, "wb") as output_file:
+ output_file.write(content)
+ return upscaled_file_path