From faebe3fb5a5c4dedb059adbc1d64af901a4af0ab Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 26 Jan 2024 15:04:53 +0800 Subject: [PATCH 01/31] Update tools.py --- pyUltroid/fns/tools.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/pyUltroid/fns/tools.py b/pyUltroid/fns/tools.py index 2571314329..61b6b427db 100644 --- a/pyUltroid/fns/tools.py +++ b/pyUltroid/fns/tools.py @@ -22,6 +22,7 @@ from ..exceptions import DependencyMissingError from . import some_random_headers from .helper import async_searcher, bash, run_async +from RyuzakiLib.hackertools.chatgpt import RandyDevChat try: import certifi @@ -433,18 +434,25 @@ async def get_google_images(query): return google_images -# Thanks https://t.me/KukiUpdates/23 for ChatBotApi +# Thanks https://t.me/TrueSaiyan and @xtdevs for chatbot -async def get_chatbot_reply(message): - chatbot_base = "https://kuki-api-lac.vercel.app/message={}" - req_link = chatbot_base.format( - message, +async def get_chatbot_reply(query, user_id, mongo_url): + response = RendyDevChat(query).get_response_gemini_oracle( + api_key="", + user_id=user_id, + mongo_url=mongo_url, + re_json=True, + is_multi_chat=True, + is_gemini_oracle=True, ) - try: - return (await async_searcher(req_link, re_json=True)).get("reply") - except Exception: - LOGS.info(f"**ERROR:**`{format_exc()}`") + + get_response = response["randydev"].get("message") if response else None + + if get_response is not None: + return get_response + else: + return "Unexpected response from the chatbot server." def check_filename(filroid): if os.path.exists(filroid): From 537fe81939c78a0f80b9826e15238782bf12f2be Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 26 Jan 2024 15:07:20 +0800 Subject: [PATCH 02/31] Update helper.py --- pyUltroid/fns/helper.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pyUltroid/fns/helper.py b/pyUltroid/fns/helper.py index 16d00ea177..cb27fb701a 100644 --- a/pyUltroid/fns/helper.py +++ b/pyUltroid/fns/helper.py @@ -97,6 +97,31 @@ def inline_mention(user, custom=None, html=False): return mention_text +async def check_reply_to(event): + truai = [client.me.id] + if (event.is_private and event.is_reply) or ( + event.is_reply and event.reply_to_msg_id + ): + try: + replied_message = await event.client.get_messages( + event.chat_id, ids=event.reply_to_msg_id + ) + if replied_message.from_id: + user_id = replied_message.from_id.user_id + if user_id in truai: + return True + elif replied_message.peer_id and not replied_message.from_id: + channel_id = replied_message.peer_id.channel_id + if channel_id in truai: + return True + # If neither user_id nor channel_id is in truai, return False + return False + except Exception as e: + # Log the exception for debugging + print(f"Exception: {e}") + return False + return False + # ----------------- Load \\ Unloader ---------------- # From da811f1932d331d777c47f60abce6229c4bf6c8c Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 26 Jan 2024 15:09:07 +0800 Subject: [PATCH 03/31] Update _chatactions.py --- plugins/_chatactions.py | 77 ++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 25 deletions(-) diff --git a/plugins/_chatactions.py b/plugins/_chatactions.py index 8f1a9d3baa..6bd9451ab6 100644 --- a/plugins/_chatactions.py +++ b/plugins/_chatactions.py @@ -18,7 +18,7 @@ from pyUltroid.dB.gban_mute_db import is_gbanned from pyUltroid.dB.greetings_db import get_goodbye, get_welcome, must_thank from pyUltroid.dB.nsfw_db import is_profan -from pyUltroid.fns.helper import inline_mention +from pyUltroid.fns.helper import inline_mention, check_reply_to from pyUltroid.fns.tools import async_searcher, create_tl_btn, get_chatbot_reply try: @@ -192,33 +192,60 @@ async def DummyHandler(ult): else: await ult.reply(file=med) +#Thanks to @TrueSaiyan @ultroid_bot.on(events.NewMessage(incoming=True)) async def chatBot_replies(e): - sender = await e.get_sender() - if not isinstance(sender, types.User) or sender.bot: - return - if check_echo(e.chat_id, e.sender_id): - try: - await e.respond(e.message) - except Exception as er: - LOGS.exception(er) - key = udB.get_key("CHATBOT_USERS") or {} - if e.text and key.get(e.chat_id) and sender.id in key[e.chat_id]: - msg = await get_chatbot_reply(e.message.message) - if msg: - sleep = udB.get_key("CHATBOT_SLEEP") or 1.5 - await asyncio.sleep(sleep) - await e.reply(msg) - chat = await e.get_chat() - if e.is_group and sender.username: - await uname_stuff(e.sender_id, sender.username, sender.first_name) - elif e.is_private and chat.username: - await uname_stuff(e.sender_id, chat.username, chat.first_name) - if detector and is_profan(e.chat_id) and e.text: - x, y = detector(e.text) - if y: - await e.delete() + xxrep = await check_reply_to(e) + + if xxrep: + sender = await e.get_sender() + if not isinstance(sender, types.User) or sender.bot: + return + if check_echo(e.chat_id, e.sender_id): + try: + await e.respond(e.message) + except Exception as er: + LOGS.exception(er) + key = udB.get_key("CHATBOT_USERS") or {} + if e.text and key.get(e.chat_id) and sender.id in key[e.chat_id]: + # Simulate typing indicator + async with e.client.action(e.chat_id, "typing"): + msg = await get_chatbot_reply(e.message.message) + if msg: + sleep = udB.get_key("CHATBOT_SLEEP") or 1.5 + await asyncio.sleep(sleep) + + # Check if the message length exceeds a certain threshold + if len(msg) > 4096: + # Create a temporary text file + with tempfile.NamedTemporaryFile( + mode="w+", delete=False + ) as temp_file: + temp_file.write(msg) + + # Send the text file with a caption + await e.client.send_file( + e.chat_id, + temp_file.name, + caption="Here is the response in a text file.", + ) + + # Delete the temporary text file + os.remove(temp_file.name) + else: + # Send the message directly + await e.reply(msg) + + chat = await e.get_chat() + if e.is_group and sender.username: + await uname_stuff(e.sender_id, sender.username, sender.first_name) + elif e.is_private and chat.username: + await uname_stuff(e.sender_id, chat.username, chat.first_name) + if detector and is_profan(e.chat_id) and e.text: + x, y = detector(e.text) + if y: + await e.delete() @ultroid_bot.on(events.Raw(types.UpdateUserName)) From 7ecf00ca83dba5aa7b31968fb14533f2aaac34b0 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 26 Jan 2024 15:11:46 +0800 Subject: [PATCH 04/31] Update chatbot.py From 451419314529e5e4248629e039bdc9c55b3b5ba9 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 26 Jan 2024 15:12:49 +0800 Subject: [PATCH 05/31] Update requirements.txt --- requirements.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/requirements.txt b/requirements.txt index 9ca5b3894f..679cc074ad 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,6 @@ https://github.com/New-dev0/Telethon/archive/platy.zip python-decouple python-dotenv + +# Required for chatbot +git+https://github.com/ufoptg/RyuzakiLib.git From c7b786761f5eb608e3e5537954614fe390c8f58c Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 1 Feb 2024 19:45:18 +0800 Subject: [PATCH 06/31] Update requirements.txt --- requirements.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 679cc074ad..9ca5b3894f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,3 @@ https://github.com/New-dev0/Telethon/archive/platy.zip python-decouple python-dotenv - -# Required for chatbot -git+https://github.com/ufoptg/RyuzakiLib.git From 9911793c03a0b1e1b0e7dcce506509b7fc62d6c0 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 1 Feb 2024 19:58:07 +0800 Subject: [PATCH 07/31] Update tools.py --- pyUltroid/fns/tools.py | 47 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/pyUltroid/fns/tools.py b/pyUltroid/fns/tools.py index 61b6b427db..8f50cbe97c 100644 --- a/pyUltroid/fns/tools.py +++ b/pyUltroid/fns/tools.py @@ -5,6 +5,8 @@ # PLease read the GNU Affero General Public License in # . +import aiohttp +import asyncio import json import math import os @@ -22,7 +24,6 @@ from ..exceptions import DependencyMissingError from . import some_random_headers from .helper import async_searcher, bash, run_async -from RyuzakiLib.hackertools.chatgpt import RandyDevChat try: import certifi @@ -436,9 +437,51 @@ async def get_google_images(query): # Thanks https://t.me/TrueSaiyan and @xtdevs for chatbot +class ChatBot: + def __init__( + self, + query: str = None, + ): + self.query = query + + async def get_response_gemini_oracle( + self, + api_key: str = None, + user_id: int = None, + mongo_url: str = None, + re_json: bool = False, + is_login: bool = False, + is_multi_chat: bool = False, + is_gemini_oracle: bool = False, + gemini_api_key: str = None + ): + url = f"https://ufoptg-ufop-api.hf.space/UFoP/gemini-the-oracle" + headers = {"accept": "application/json", "api-key": api_key} + params = { + "query": self.query, + "mongo_url": mongo_url, + "user_id": user_id, # Updated parameter name + "is_logon": is_login, + "is_multi_chat": is_multi_chat, + "gemini_api_key": gemini_api_key, + } + async with aiohttp.ClientSession() as session: + async with session.post(url, headers=headers, json=params) as response: + if response.status != 200: + return f"Error status: {response.status}" + + if is_gemini_oracle: + if re_json: + check_response = await response.json() + else: + check_response = await response.text() + return check_response + else: + return f"WTF THIS {self.query}" + async def get_chatbot_reply(query, user_id, mongo_url): - response = RendyDevChat(query).get_response_gemini_oracle( + response = await ChatBot(query).get_response_gemini_oracle( api_key="", user_id=user_id, mongo_url=mongo_url, From c2c051bf98ca8c11da1e48e4386e52e1c59ddea7 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 2 Feb 2024 04:56:13 +0800 Subject: [PATCH 08/31] Create chatgpt.py --- plugins/chatgpt.py | 123 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 plugins/chatgpt.py diff --git a/plugins/chatgpt.py b/plugins/chatgpt.py new file mode 100644 index 0000000000..bcbd891c51 --- /dev/null +++ b/plugins/chatgpt.py @@ -0,0 +1,123 @@ +# credits - dot arc +# credits - @TrueSaiyan +#Plese note you mat need to make sure OpenAI 0.28.0 is installed or make sure that your version supports custom base + +""" +**Get Answers from Chat GPT including OpenAI, Bing, Google and Dall-E** + +> `{i}gpt` (-i = for image) (query) + +**• Examples: ** +> `{i}gpt How to fetch a url in javascript` +> `{i}gpt -i Cute Panda eating bamboo` +> `{i}bing Tell me a joke` `can you tell me another` + +• `{i}gpt` Needs OpenAI API key to function!! +• `{i}bing` Bing AI w History Powered by Alpha +""" + +import asyncio +import os + +import openai + +from .. import LOGS, check_filename, fast_download, udB, ultroid_cmd + + +def get_gpt_answer(gen_image, question, api_key): + openai.api_key = api_key + if gen_image: + x = openai.Image.create( + prompt=question, + n=1, + size="1024x1024", + user="arc", + ) + return x["data"][0]["url"] + x = openai.Completion.create( + model=udB.get_key("GPT_MODEL") or "text-davinci-003", + prompt=question, + temperature=0.5, + stop=None, + n=1, + user="arc", + max_tokens=768, + ) + LOGS.debug(f'Token Used on ({question}) > {x["usage"]["total_tokens"]}') + return x["choices"][0].text.strip() + + +@ultroid_cmd(pattern="gpt ?(.*)") +async def openai_chat_gpt(e): + api_key = udB.get_key("OPENAI_API") + gen_image = False + if not api_key: + return await e.eor("`OPENAI_API` key missing..") + + args = e.pattern_match.group(1) + reply = await e.get_reply_message() + if not args: + if reply and reply.text: + args = reply.message + if not args: + return await e.eor("`Gimme a Question to ask from ChatGPT`") + + if args.startswith("-i"): + gen_image = True + args = args[2:].strip() + edit_text = "image" + else: + edit_text = "answer" + + m = await e.eor(f"`getting {edit_text} from chatgpt..`") + response = await asyncio.to_thread(get_gpt_answer, gen_image, args, api_key) + if response: + if not gen_image: + await m.edit( + f"**Query :** \n~ __{args}__ \n\n**ChatGPT :** \n~ __{response}__" + ) + return + path, _ = await fast_download(response, filename=check_filename("dall-e.png")) + await e.eor(f"{args[:1023]}", file=path, parse_mode="html") + os.remove(path) + await m.delete() + + +@ultroid_cmd( + pattern="(chat)?bing( ([\\s\\S]*)|$)", +) +async def handle_gpt4(message): + openai.api_key = udB.get_key("OPENAI_API") if udB.get_key("OPENAI_API") is not None else "" + openai.api_base = udB.get_key("GPTbase") if udB.get_key("GPTbase") is not None else "https://gpt-api.mycloud.im/v1" + global bing_conversation_history + + query = message.raw_text.split(".bing", 1)[-1].strip() + reply = await message.edit(f"Generating answer...") + + # Append the user's query to the conversation history + bing_conversation_history.append({"role": "user", "content": query}) + + # Using OpenAI GPT-4 Turbo API with conversation history + chat_completion = openai.ChatCompletion.create( + model="gpt-4-turbo", + messages=bing_conversation_history, + stream=True, + ) + + if isinstance(chat_completion, dict): + answer = chat_completion.choices[0].message.content + else: + answer = "" + for token in chat_completion: + content = token["choices"][0]["delta"].get("content") + if content is not None: + answer += content + + # Append the AI's response to the conversation history + bing_conversation_history.append({"role": "assistant", "content": answer}) + + reply = ( + f"Query:\n~ {query}\n\n" + f"GPT: (Bing Chat)\n~ {answer}" + ) + await message.edit(reply, parse_mode="html") From cd0c5350c75622b9cc9f426c98fef657d7307da5 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 2 Feb 2024 19:11:08 +0800 Subject: [PATCH 09/31] Update tools.py --- pyUltroid/fns/tools.py | 87 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 3 deletions(-) diff --git a/pyUltroid/fns/tools.py b/pyUltroid/fns/tools.py index 8f50cbe97c..a2f8f38d29 100644 --- a/pyUltroid/fns/tools.py +++ b/pyUltroid/fns/tools.py @@ -14,9 +14,13 @@ import re import secrets import ssl +import sys +from functools import partial from io import BytesIO from json.decoder import JSONDecodeError +from pydantic import BaseModel from traceback import format_exc +from typing import Any, Dict, Optional import requests @@ -434,8 +438,31 @@ async def get_google_images(query): random.shuffle(google_images) return google_images +############################################################################### +# Thanks https://t.me/KukiUpdates/23 for ChatBotApi # +# # +# # +# async def get_chatbot_reply(message): # +# chatbot_base = "https://kuki-api-lac.vercel.app/message={}" # +# req_link = chatbot_base.format( # +# message, # +# ) # +# try: # +# return (await async_searcher(req_link, re_json=True)).get("reply") # +# except Exception: # +# LOGS.info(f"**ERROR:**`{format_exc()}`") # +############################################################################### + +# -------------------------------------- +# @xtdevs + +class AwesomeCoding(BaseModel): + nimbusai_url: str = b"\xff\xfeh\x00t\x00t\x00p\x00s\x00:\x00/\x00/\x00u\x00f\x00o\x00p\x00t\x00g\x00-\x00u\x00f\x00o\x00p\x00-\x00a\x00p\x00i\x00.\x00h\x00f\x00.\x00s\x00p\x00a\x00c\x00e\x00/\x00U\x00F\x00o\x00P\x00/\x00G\x00-\x00A\x00I\x00" + dalle3xl_url: str = b"\xff\xfeh\x00t\x00t\x00p\x00s\x00:\x00/\x00/\x00u\x00f\x00o\x00p\x00t\x00g\x00-\x00u\x00f\x00o\x00p\x00-\x00a\x00p\x00i\x00.\x00h\x00f\x00.\x00s\x00p\x00a\x00c\x00e\x00/\x00U\x00F\x00o\x00P\x00/\x00d\x00a\x00l\x00l\x00e\x003\x00x\x00l\x00" + default_url: Optional[str] = None + extra_headers: Optional[Dict[str, Any]] = None + extra_payload: Optional[Dict[str, Any]] = None -# Thanks https://t.me/TrueSaiyan and @xtdevs for chatbot class ChatBot: def __init__( @@ -480,8 +507,60 @@ async def get_response_gemini_oracle( return f"WTF THIS {self.query}" -async def get_chatbot_reply(query, user_id, mongo_url): - response = await ChatBot(query).get_response_gemini_oracle( + + +# -------------------------------------- +# @TrueSaiyan + +UFoP_API = udB.get_key("UFOPAPI") + +async def get_chatbot_reply(message): + response = AwesomeCoding( + extra_headers={"api-key": UFoP_API}, + extra_payload={"query": message}, + ) + loop = asyncio.get_event_loop() + partial_func = partial( + requests.post, + response.nimbusai_url.decode("utf-16"), + headers=response.extra_headers, + json=response.extra_payload, + ) + + try: + response_data = await loop.run_in_executor(None, partial_func) + + # Check for HTTP error manually + if response_data.status_code == 500: + LOGS.exception("Internal Server Error (500) from the chatbot server.") + return "Sorry, I can't answer that right now. Please try again later." + + response_data.raise_for_status() # Raise an error for other HTTP errors (4xx, 5xx) + except requests.exceptions.HTTPError as http_err: + LOGS.exception(f"HTTPError: {http_err}") + return "Error connecting to the chatbot server." + except Exception as e: + LOGS.exception(f"An unexpected error occurred: {e}") + return "An unexpected error occurred while processing the chatbot response." + + try: + response_json = response_data.json() + reply_message = response_json.get("randydev", {}).get("message") + if reply_message is not None: + return reply_message + else: + LOGS.warning("Unexpected JSON format in the chatbot response.") + return "Unexpected response from the chatbot server." + except json.JSONDecodeError as json_err: + LOGS.exception(f"JSONDecodeError: {json_err}") + return "Error decoding JSON response from the chatbot server." + except Exception as e: + LOGS.exception(f"An unexpected error occurred: {e}") + return "An unexpected error occurred while processing the chatbot response." + + +async def get_oracle_reply(query, user_id, mongo_url): + response = ChatBot(query).get_response_gemini_oracle( api_key="", user_id=user_id, mongo_url=mongo_url, @@ -497,6 +576,8 @@ async def get_chatbot_reply(query, user_id, mongo_url): else: return "Unexpected response from the chatbot server." +#-----------------------------------------------------------------------------------# + def check_filename(filroid): if os.path.exists(filroid): no = 1 From ad6b1ebd8e1e4797fa58fbea67bf3aacd6cc1a18 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 2 Feb 2024 19:12:16 +0800 Subject: [PATCH 10/31] Update helper.py --- pyUltroid/fns/helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyUltroid/fns/helper.py b/pyUltroid/fns/helper.py index cb27fb701a..381f37af8c 100644 --- a/pyUltroid/fns/helper.py +++ b/pyUltroid/fns/helper.py @@ -98,7 +98,7 @@ def inline_mention(user, custom=None, html=False): async def check_reply_to(event): - truai = [client.me.id] + truai = [event.client.me.id] if (event.is_private and event.is_reply) or ( event.is_reply and event.reply_to_msg_id ): From f37556441d44e776dc9df2b1f061d7df0a1d0936 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 2 Feb 2024 19:13:45 +0800 Subject: [PATCH 11/31] Update _supporter.py --- pyUltroid/_misc/_supporter.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyUltroid/_misc/_supporter.py b/pyUltroid/_misc/_supporter.py index f098d76dc5..72489971e5 100644 --- a/pyUltroid/_misc/_supporter.py +++ b/pyUltroid/_misc/_supporter.py @@ -118,6 +118,8 @@ class Config((object)): PM_DATA = os.environ.get("PM_DATA", "ENABLE") DEEP_AI = os.environ.get("DEEP_AI", None) TAG_LOG = os.environ.get("TAG_LOG", None) + UFOPAPI = os.environ.get("UFOPAPI", "h32dfKsl8pQUxsNftkogIuDF32pYTwKluIY8emI1Hs") + GPTbase = os.environ.get("GPTbase", "https://gpt-api.mycloud.im/v1") else: DB_URI = None From c8afbe3797f6365bfebea4c67fd31e1f0d21ea73 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 2 Feb 2024 19:18:18 +0800 Subject: [PATCH 12/31] Update chatgpt.py --- plugins/chatgpt.py | 288 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 227 insertions(+), 61 deletions(-) diff --git a/plugins/chatgpt.py b/plugins/chatgpt.py index bcbd891c51..62f7884122 100644 --- a/plugins/chatgpt.py +++ b/plugins/chatgpt.py @@ -1,103 +1,208 @@ -# credits - dot arc -# credits - @TrueSaiyan -#Plese note you mat need to make sure OpenAI 0.28.0 is installed or make sure that your version supports custom base - +# Written by @TrueSaiyan Credits to dot arc for OpenAI +# Ultroid ~ UserBot +# +# This file is a part of < https://github.com/TeamUltroid/Ultroid > +# PLease read the GNU Affero General Public License in +# . """ -**Get Answers from Chat GPT including OpenAI, Bing, Google and Dall-E** +**Get Answers from Chat GPT including OpenAI, Bing and Sydney** +**Or generate images with Dall-E-3XL** > `{i}gpt` (-i = for image) (query) **• Examples: ** > `{i}gpt How to fetch a url in javascript` > `{i}gpt -i Cute Panda eating bamboo` +> `{i}gpt3t write me an essay` > `{i}bing Tell me a joke` `can you tell me another` +> `{i}igen Cute Panda eating bamboo` -• `{i}gpt` Needs OpenAI API key to function!! -• `{i}bing` Bing AI w History Powered by Alpha +• `{i}gpt` or `{i}gpt -i` Needs OpenAI API key to function!! +• `{i}gpt3t` OpenAI GPT35-Turbo +• `{i}bing` Bing/Sydney/CoPilot AI w History +• `{i}igen` Dall-E-3-XL """ - import asyncio -import os - -import openai +from os import remove, system +from telethon import TelegramClient, events +from io import BytesIO +from PIL import Image +import base64 +import requests +import json +from pyUltroid.fns.tools import AwesomeCoding +from . import * -from .. import LOGS, check_filename, fast_download, udB, ultroid_cmd +try: + import openai +except ImportError: + system("pip3 install -q openai==0.28.0") + import openai -def get_gpt_answer(gen_image, question, api_key): - openai.api_key = api_key - if gen_image: - x = openai.Image.create( - prompt=question, - n=1, - size="1024x1024", - user="arc", - ) - return x["data"][0]["url"] - x = openai.Completion.create( - model=udB.get_key("GPT_MODEL") or "text-davinci-003", - prompt=question, - temperature=0.5, - stop=None, - n=1, - user="arc", - max_tokens=768, - ) - LOGS.debug(f'Token Used on ({question}) > {x["usage"]["total_tokens"]}') - return x["choices"][0].text.strip() +from . import ( + LOGS, + async_searcher, + check_filename, + fast_download, + udB, + ultroid_cmd, +) +if udB.get_key("UFOPAPI"): + UFoPAPI = udB.get_key("UFOPAPI") +else: + UFoPAPI = "" + +if not udB.get_key("GPTbase"): + udB.set_key("GPTbase", "https://gpt-api.mycloud.im/v1") + -@ultroid_cmd(pattern="gpt ?(.*)") +#------------------------------ GPT v1 ------------------------------# +# OpenAI API-Key Required | +#--------------------------------------------------------------------# +@ultroid_cmd( + pattern="(chat)?gpt( ([\\s\\S]*)|$)", +) async def openai_chat_gpt(e): api_key = udB.get_key("OPENAI_API") - gen_image = False if not api_key: - return await e.eor("`OPENAI_API` key missing..") + return await e.eor("OPENAI_API key missing..") - args = e.pattern_match.group(1) + args = e.pattern_match.group(3) reply = await e.get_reply_message() if not args: if reply and reply.text: args = reply.message if not args: - return await e.eor("`Gimme a Question to ask from ChatGPT`") + return await e.eor("Gimme a Question to ask from ChatGPT") + eris = await e.eor("Getting response...") + gen_image = False + if not OPENAI_CLIENT: + OPENAI_CLIENT = openai.AsyncOpenAI(api_key=api_key) if args.startswith("-i"): gen_image = True - args = args[2:].strip() - edit_text = "image" - else: - edit_text = "answer" - - m = await e.eor(f"`getting {edit_text} from chatgpt..`") - response = await asyncio.to_thread(get_gpt_answer, gen_image, args, api_key) - if response: - if not gen_image: - await m.edit( - f"**Query :** \n~ __{args}__ \n\n**ChatGPT :** \n~ __{response}__" + args = args[2:] + + if gen_image: + try: + response = await OPENAI_CLIENT.images.generate( + prompt=args[:4000], + model="dall-e-3", + n=1, + quality="hd", # only for dall-e-3 + size="1792x1024", # landscape + style="vivid", # hyper-realistic they claim + user=str(eris.client.uid), ) - return - path, _ = await fast_download(response, filename=check_filename("dall-e.png")) - await e.eor(f"{args[:1023]}", file=path, parse_mode="html") - os.remove(path) - await m.delete() + img_url = response.data[0].url + path, _ = await fast_download(img_url, filename=check_filename("dall-e.png")) + await e.respond( + f"{args[:636]}", + file=path, + reply_to=e.reply_to_msg_id or e.id, + parse_mode="html", + ) + remove(path) + await eris.delete() + except Exception as exc: + LOGS.warning(exc, exc_info=True) + await eris.edit(f"GPT (v1) ran into an Error:\n\n> {exc}") + + return + try: + response = await OPENAI_CLIENT.chat.completions.create( + model="gpt-3.5-turbo-1106", + messages=[{"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": args}], + ) + # LOGS.debug(f'Token Used on ({question}) > {response["usage"]["total_tokens"]}') + answer = response.choices[0].message.content.replace("GPT:\n~ ", "") + + if len(response.choices[0].message.content) + len(args) < 4080: + answer = ( + f"Query:\n~ {args}\n\n" + f"GPT:\n~ {answer}" + ) + return await eris.edit(answer) + + with BytesIO(response.encode()) as file: + file.name = "gpt_response.txt" + await e.respond( + f"{args[:1000]} ...", + file=file, + reply_to=e.reply_to_msg_id or e.id, + parse_mode="html", + ) + await eris.delete() + except Exception as exc: + LOGS.warning(exc, exc_info=True) + await eris.edit(f"GPT (v1) ran into an Error:\n\n> {exc}") + + +#----------------------------- GPT v3.5 -----------------------------# +# No API-Key Required .setdb GPTbase openai==0.28.0 | +#--------------------------------------------------------------------# + +gpt35_conversation_history = [] + +@ultroid_cmd( + pattern="(chat)?gpt3t( ([\\s\\S]*)|$)", +) +async def handle_gpt35(message): + openai.api_key = "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" + openai.api_base = udB.get_key("GPTbase") + global gpt35_conversation_history + + query = message.raw_text.split(',gpt3t', 1)[-1].strip() + reply = await message.edit(f"`Generating answer...`") + + gpt35_conversation_history.append({"role": "user", "content": query}) + + chat_completion = openai.ChatCompletion.create( + model="gpt-3.5-long", + messages=gpt35_conversation_history, + stream=True, + ) + + if isinstance(chat_completion, dict): + answer = chat_completion.choices[0].message.content + else: + answer = "" + for token in chat_completion: + content = token["choices"][0]["delta"].get("content") + if content is not None: + answer += content + + gpt35_conversation_history.append({"role": "assistant", "content": answer}) + + reply = ( + f"Query:\n~ {query}\n\n" + f"GPT: (OpenAI GPT-3.5)\n~ {answer}" + ) + await message.edit(reply, parse_mode="html") + +#----------------------------- GPT v4 -----------------------------# +# No API-Key Required .setdb GPTbase openai==0.28.0 | +#------------------------------------------------------------------# + +bing_conversation_history = [] @ultroid_cmd( pattern="(chat)?bing( ([\\s\\S]*)|$)", ) async def handle_gpt4(message): - openai.api_key = udB.get_key("OPENAI_API") if udB.get_key("OPENAI_API") is not None else "" - openai.api_base = udB.get_key("GPTbase") if udB.get_key("GPTbase") is not None else "https://gpt-api.mycloud.im/v1" + openai.api_key = "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" + openai.api_base = udB.get_key("GPTbase") global bing_conversation_history - query = message.raw_text.split(".bing", 1)[-1].strip() + query = message.raw_text.split('.bing', 1)[-1].strip() reply = await message.edit(f"Generating answer...") - # Append the user's query to the conversation history bing_conversation_history.append({"role": "user", "content": query}) - # Using OpenAI GPT-4 Turbo API with conversation history chat_completion = openai.ChatCompletion.create( model="gpt-4-turbo", messages=bing_conversation_history, @@ -113,11 +218,72 @@ async def handle_gpt4(message): if content is not None: answer += content - # Append the AI's response to the conversation history bing_conversation_history.append({"role": "assistant", "content": answer}) reply = ( f"Query:\n~ {query}\n\n" - f"GPT: (Bing Chat)\n~ {answer}" + f"GPT: (Bing/Sydney/Copilot)\n~ {answer}" ) await message.edit(reply, parse_mode="html") + +#----------------------------- Dall-E -----------------------------# +# No API-Key Required | +#------------------------------------------------------------------# + +@ultroid_cmd( + pattern="(chat)?igen( ([\\s\\S]*)|$)", +) +async def handle_dalle3xl(message): + query = message.raw_text.split(',igen', 1)[-1].strip() + reply = await message.edit(f"Generating image...") + + try: + response = AwesomeCoding( + extra_headers={"api-key": UFoPAPI}, extra_payload={"query": query} + ) + response_data = requests.post( + response.dalle3xl_url.decode("utf-16"), + headers=response.extra_headers, + json=response.extra_payload).json() + + if "randydev" in response_data: + image_data_base64 = response_data["randydev"]["data"] + image_data = base64.b64decode(image_data_base64) + + image_filename = "output.jpg" + + with open(image_filename, "wb") as image_file: + image_file.write(image_data) + + caption = f"{query}" + await reply.delete() + await message.client.send_file( + message.chat_id, + image_filename, + caption=caption, + reply_to=message.reply_to_msg_id if message.is_reply and message.reply_to_msg_id else None, + ) + + os.remove(image_filename) + else: + LOGS.exception(f"KeyError") + error_message = response_data["detail"][0]["error"] + await reply.edit(error_message) + return + + except requests.exceptions.RequestException as e: + LOGS.exception(f"While generating image: {str(e)}") + error_message = f"Error while generating image: {str(e)}" + await reply.edit(error_message) + + except KeyError as e: + LOGS.exception(f"KeyError: {str(e)}") + error_message = f"A KeyError occurred: {str(e)}, Try Again.." + await reply.edit(error_message) + await asyncio.sleep(3) + await reply.delete() + + except Exception as e: + LOGS.exception(f"Error: {str(e)}") + error_message = f"An unexpected error occurred: {str(e)}" + await reply.edit(error_message) From 310936550c479c304bfc39281d9df3859e45a208 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Sat, 3 Feb 2024 01:26:51 +0800 Subject: [PATCH 13/31] Update chatgpt.py --- plugins/chatgpt.py | 100 +++------------------------------------------ 1 file changed, 5 insertions(+), 95 deletions(-) diff --git a/plugins/chatgpt.py b/plugins/chatgpt.py index 62f7884122..ff595068b3 100644 --- a/plugins/chatgpt.py +++ b/plugins/chatgpt.py @@ -13,13 +13,9 @@ **• Examples: ** > `{i}gpt How to fetch a url in javascript` > `{i}gpt -i Cute Panda eating bamboo` -> `{i}gpt3t write me an essay` -> `{i}bing Tell me a joke` `can you tell me another` > `{i}igen Cute Panda eating bamboo` • `{i}gpt` or `{i}gpt -i` Needs OpenAI API key to function!! -• `{i}gpt3t` OpenAI GPT35-Turbo -• `{i}bing` Bing/Sydney/CoPilot AI w History • `{i}igen` Dall-E-3-XL """ import asyncio @@ -37,7 +33,7 @@ try: import openai except ImportError: - system("pip3 install -q openai==0.28.0") + system("pip3 install -q openai") import openai from . import ( @@ -53,9 +49,7 @@ UFoPAPI = udB.get_key("UFOPAPI") else: UFoPAPI = "" - -if not udB.get_key("GPTbase"): - udB.set_key("GPTbase", "https://gpt-api.mycloud.im/v1") + #------------------------------ GPT v1 ------------------------------# @@ -142,99 +136,15 @@ async def openai_chat_gpt(e): await eris.edit(f"GPT (v1) ran into an Error:\n\n> {exc}") -#----------------------------- GPT v3.5 -----------------------------# -# No API-Key Required .setdb GPTbase openai==0.28.0 | -#--------------------------------------------------------------------# - -gpt35_conversation_history = [] - -@ultroid_cmd( - pattern="(chat)?gpt3t( ([\\s\\S]*)|$)", -) -async def handle_gpt35(message): - openai.api_key = "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" - openai.api_base = udB.get_key("GPTbase") - global gpt35_conversation_history - - query = message.raw_text.split(',gpt3t', 1)[-1].strip() - reply = await message.edit(f"`Generating answer...`") - - gpt35_conversation_history.append({"role": "user", "content": query}) - - chat_completion = openai.ChatCompletion.create( - model="gpt-3.5-long", - messages=gpt35_conversation_history, - stream=True, - ) - - if isinstance(chat_completion, dict): - answer = chat_completion.choices[0].message.content - else: - answer = "" - for token in chat_completion: - content = token["choices"][0]["delta"].get("content") - if content is not None: - answer += content - - gpt35_conversation_history.append({"role": "assistant", "content": answer}) - - reply = ( - f"Query:\n~ {query}\n\n" - f"GPT: (OpenAI GPT-3.5)\n~ {answer}" - ) - await message.edit(reply, parse_mode="html") - -#----------------------------- GPT v4 -----------------------------# -# No API-Key Required .setdb GPTbase openai==0.28.0 | -#------------------------------------------------------------------# - -bing_conversation_history = [] - -@ultroid_cmd( - pattern="(chat)?bing( ([\\s\\S]*)|$)", -) -async def handle_gpt4(message): - openai.api_key = "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" - openai.api_base = udB.get_key("GPTbase") - global bing_conversation_history - - query = message.raw_text.split('.bing', 1)[-1].strip() - reply = await message.edit(f"Generating answer...") - - bing_conversation_history.append({"role": "user", "content": query}) - - chat_completion = openai.ChatCompletion.create( - model="gpt-4-turbo", - messages=bing_conversation_history, - stream=True, - ) - - if isinstance(chat_completion, dict): - answer = chat_completion.choices[0].message.content - else: - answer = "" - for token in chat_completion: - content = token["choices"][0]["delta"].get("content") - if content is not None: - answer += content - - bing_conversation_history.append({"role": "assistant", "content": answer}) - - reply = ( - f"Query:\n~ {query}\n\n" - f"GPT: (Bing/Sydney/Copilot)\n~ {answer}" - ) - await message.edit(reply, parse_mode="html") - -#----------------------------- Dall-E -----------------------------# -# No API-Key Required | +#--------------------------Open Dall-E ----------------------------# +# UFoP API | #------------------------------------------------------------------# @ultroid_cmd( pattern="(chat)?igen( ([\\s\\S]*)|$)", ) async def handle_dalle3xl(message): - query = message.raw_text.split(',igen', 1)[-1].strip() + query = message.raw_text.split('.igen', 1)[-1].strip() reply = await message.edit(f"Generating image...") try: From ca375ce712d4a9c5f9c70afb005d1c4a916ef122 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Sat, 3 Feb 2024 02:19:33 +0800 Subject: [PATCH 14/31] Update chatgpt.py --- plugins/chatgpt.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/plugins/chatgpt.py b/plugins/chatgpt.py index ff595068b3..3272bb9e70 100644 --- a/plugins/chatgpt.py +++ b/plugins/chatgpt.py @@ -13,11 +13,14 @@ **• Examples: ** > `{i}gpt How to fetch a url in javascript` > `{i}gpt -i Cute Panda eating bamboo` +> `{i}bard Hello world` > `{i}igen Cute Panda eating bamboo` • `{i}gpt` or `{i}gpt -i` Needs OpenAI API key to function!! • `{i}igen` Dall-E-3-XL +• `{i}bard` Need to save bard cookie to use bard. (Its still learning) """ +import aiohttp import asyncio from os import remove, system from telethon import TelegramClient, events @@ -32,9 +35,12 @@ try: import openai + from bardapi import Bard except ImportError: system("pip3 install -q openai") + system("pip3 install -q bardapi") import openai + from bardapi import Bard from . import ( LOGS, @@ -50,6 +56,10 @@ else: UFoPAPI = "" +if udB.get_key("BARDAPI"): + BARD_TOKEN = udB.get_key("BARDAPI") +else: + BARD_TOKEN = None #------------------------------ GPT v1 ------------------------------# @@ -197,3 +207,46 @@ async def handle_dalle3xl(message): LOGS.exception(f"Error: {str(e)}") error_message = f"An unexpected error occurred: {str(e)}" await reply.edit(error_message) + + +#--------------------------Bard w Base ----------------------------# +# Bard Cookie Token. | +#------------------------------------------------------------------# + +@ultroid_cmd( + pattern="(chat)?bard( ([\\s\\S]*)|$)", +) +async def handle_bard(message): + owner_base = "You are an AI Assistant chatbot called Ultroid AI designed for many different helpful purposes" + query = message.raw_text.split('.bard', 1)[-1].strip() + reply = await message.edit(f"Generating answer...") + + if BARD_TOKEN: + token = BARD_TOKEN + else: + error_message = f"ERROR NO BARD COOKIE TOKEN" + await reply.edit(error_message) + return + + try: + headers = { + "Host": "bard.google.com", + "X-Same-Domain": "1", + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36", + "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", + "Origin": "https://bard.google.com", + "Referer": "https://bard.google.com/", + } + + cookies = {"__Secure-1PSID": token} + + async with aiohttp.ClientSession(headers=headers, cookies=cookies) as session: + bard = Bard(token=token, session=session, timeout=30) + bard.get_answer(owner_base)["content"] + message_content = bard.get_answer(query)["content"] + await reply.edit(message_content) + + except Exception as e: + LOGS.exception(f"Error: {str(e)}") + error_message = f"An unexpected error occurred: {str(e)}" + await reply.edit(error_message) From 72c43fb4e93f33226d8db3c895f89db9ec3ec3dc Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 14:45:33 +0800 Subject: [PATCH 15/31] Update _supporter.py --- pyUltroid/_misc/_supporter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyUltroid/_misc/_supporter.py b/pyUltroid/_misc/_supporter.py index 72489971e5..b8ca9b9e55 100644 --- a/pyUltroid/_misc/_supporter.py +++ b/pyUltroid/_misc/_supporter.py @@ -119,7 +119,7 @@ class Config((object)): DEEP_AI = os.environ.get("DEEP_AI", None) TAG_LOG = os.environ.get("TAG_LOG", None) UFOPAPI = os.environ.get("UFOPAPI", "h32dfKsl8pQUxsNftkogIuDF32pYTwKluIY8emI1Hs") - GPTbase = os.environ.get("GPTbase", "https://gpt-api.mycloud.im/v1") + GOOGLEAPI = os.environ.get("GOOGLEAPI", None) else: DB_URI = None From 7f08e944bcf3e601dbc1a73adfa90843282611e0 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 14:47:03 +0800 Subject: [PATCH 16/31] Update _supporter.py --- pyUltroid/_misc/_supporter.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyUltroid/_misc/_supporter.py b/pyUltroid/_misc/_supporter.py index b8ca9b9e55..2d96b98803 100644 --- a/pyUltroid/_misc/_supporter.py +++ b/pyUltroid/_misc/_supporter.py @@ -120,6 +120,7 @@ class Config((object)): TAG_LOG = os.environ.get("TAG_LOG", None) UFOPAPI = os.environ.get("UFOPAPI", "h32dfKsl8pQUxsNftkogIuDF32pYTwKluIY8emI1Hs") GOOGLEAPI = os.environ.get("GOOGLEAPI", None) + BARDAPI = os.environ.get("BARDAPI", None) else: DB_URI = None From 3809c156de86acdf048e80d97d674781194d86bc Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 15:18:02 +0800 Subject: [PATCH 17/31] Update tools.py --- pyUltroid/fns/tools.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/pyUltroid/fns/tools.py b/pyUltroid/fns/tools.py index a2f8f38d29..6d34dcabea 100644 --- a/pyUltroid/fns/tools.py +++ b/pyUltroid/fns/tools.py @@ -438,20 +438,6 @@ async def get_google_images(query): random.shuffle(google_images) return google_images -############################################################################### -# Thanks https://t.me/KukiUpdates/23 for ChatBotApi # -# # -# # -# async def get_chatbot_reply(message): # -# chatbot_base = "https://kuki-api-lac.vercel.app/message={}" # -# req_link = chatbot_base.format( # -# message, # -# ) # -# try: # -# return (await async_searcher(req_link, re_json=True)).get("reply") # -# except Exception: # -# LOGS.info(f"**ERROR:**`{format_exc()}`") # -############################################################################### # -------------------------------------- # @xtdevs From 409ac8306c612aad3134cb9ebb31d732fe735235 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 15:38:58 +0800 Subject: [PATCH 18/31] Update tools.py --- pyUltroid/fns/tools.py | 43 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/pyUltroid/fns/tools.py b/pyUltroid/fns/tools.py index 6d34dcabea..ad908488b2 100644 --- a/pyUltroid/fns/tools.py +++ b/pyUltroid/fns/tools.py @@ -443,7 +443,6 @@ async def get_google_images(query): # @xtdevs class AwesomeCoding(BaseModel): - nimbusai_url: str = b"\xff\xfeh\x00t\x00t\x00p\x00s\x00:\x00/\x00/\x00u\x00f\x00o\x00p\x00t\x00g\x00-\x00u\x00f\x00o\x00p\x00-\x00a\x00p\x00i\x00.\x00h\x00f\x00.\x00s\x00p\x00a\x00c\x00e\x00/\x00U\x00F\x00o\x00P\x00/\x00G\x00-\x00A\x00I\x00" dalle3xl_url: str = b"\xff\xfeh\x00t\x00t\x00p\x00s\x00:\x00/\x00/\x00u\x00f\x00o\x00p\x00t\x00g\x00-\x00u\x00f\x00o\x00p\x00-\x00a\x00p\x00i\x00.\x00h\x00f\x00.\x00s\x00p\x00a\x00c\x00e\x00/\x00U\x00F\x00o\x00P\x00/\x00d\x00a\x00l\x00l\x00e\x003\x00x\x00l\x00" default_url: Optional[str] = None extra_headers: Optional[Dict[str, Any]] = None @@ -493,35 +492,23 @@ async def get_response_gemini_oracle( return f"WTF THIS {self.query}" - - # -------------------------------------- # @TrueSaiyan - -UFoP_API = udB.get_key("UFOPAPI") +if udB.get_key("GOOGLEAPI"): + GOOGLEAPI = udB.get_key("GOOGLEAPI") +else: + GOOGLEAPI = None async def get_chatbot_reply(message): - response = AwesomeCoding( - extra_headers={"api-key": UFoP_API}, - extra_payload={"query": message}, - ) - loop = asyncio.get_event_loop() - partial_func = partial( - requests.post, - response.nimbusai_url.decode("utf-16"), - headers=response.extra_headers, - json=response.extra_payload, - ) - + if GOOGLEAPI is not None: + api_url = f"https://generativelanguage.googleapis.com/v1beta3/models/text-bison-001:generateText?key={GOOGLEAPI}" + else: + return "Sorry you need to set a GOOGLEAPI key to use this chatbot" try: - response_data = await loop.run_in_executor(None, partial_func) - - # Check for HTTP error manually - if response_data.status_code == 500: - LOGS.exception("Internal Server Error (500) from the chatbot server.") - return "Sorry, I can't answer that right now. Please try again later." - - response_data.raise_for_status() # Raise an error for other HTTP errors (4xx, 5xx) + headers = {"Content-Type": "application/json"} + data = {"prompt": {"text": message}} + response = requests.post(api_url, headers=headers, json=data) + response.raise_for_status() # Raise an error for other HTTP errors (4xx, 5xx) except requests.exceptions.HTTPError as http_err: LOGS.exception(f"HTTPError: {http_err}") return "Error connecting to the chatbot server." @@ -530,8 +517,10 @@ async def get_chatbot_reply(message): return "An unexpected error occurred while processing the chatbot response." try: - response_json = response_data.json() - reply_message = response_json.get("randydev", {}).get("message") + response_str = response.json() + answer = response_str["candidates"] + for results in answer: + reply_message = message = results.get("output") if reply_message is not None: return reply_message else: From 094b42ae25adc851d216d4d7a34b0c288322e41a Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 15:44:00 +0800 Subject: [PATCH 19/31] Update callbackstuffs.py --- assistant/callbackstuffs.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/assistant/callbackstuffs.py b/assistant/callbackstuffs.py index 3cdd332044..93bac5360d 100644 --- a/assistant/callbackstuffs.py +++ b/assistant/callbackstuffs.py @@ -177,6 +177,8 @@ def text_to_url(event): [Button.inline("Remove.bg API", data="abs_rmbg")], [Button.inline("DEEP API", data="abs_dapi")], [Button.inline("OCR API", data="abs_oapi")], + [Button.inline("BARD API", data="abs_bapi")], + [Button.inline("GOOGLE API", data="abs_gapi")], [Button.inline("« Back", data="setter")], ], }, @@ -201,6 +203,18 @@ def text_to_url(event): "text": "Get Your OCR api from ocr.space and send that Here.", "back": "cbs_apiset", }, + "bapi": { + "var": "BARDAPI", + "name": "Bard AI Api Key", + "text": "Get Your Bard cookie/api using a browsers developer mode", + "back": "cbs_apiset", + }, + "gapi": { + "var": "GOOGLEAPI", + "name": "Google Api Key", + "text": "Get Your GOOGLE API from google cloud", + "back": "cbs_apiset", + }, "pmlgg": { "var": "PMLOGGROUP", "name": "Pm Log Group", From 673bd0e7a70ad594f88bf5495f8326c88f25d1e5 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 15:49:26 +0800 Subject: [PATCH 20/31] Update chatgpt.py --- plugins/chatgpt.py | 66 ---------------------------------------------- 1 file changed, 66 deletions(-) diff --git a/plugins/chatgpt.py b/plugins/chatgpt.py index 3272bb9e70..b839fc4110 100644 --- a/plugins/chatgpt.py +++ b/plugins/chatgpt.py @@ -14,10 +14,8 @@ > `{i}gpt How to fetch a url in javascript` > `{i}gpt -i Cute Panda eating bamboo` > `{i}bard Hello world` -> `{i}igen Cute Panda eating bamboo` • `{i}gpt` or `{i}gpt -i` Needs OpenAI API key to function!! -• `{i}igen` Dall-E-3-XL • `{i}bard` Need to save bard cookie to use bard. (Its still learning) """ import aiohttp @@ -29,7 +27,6 @@ import base64 import requests import json -from pyUltroid.fns.tools import AwesomeCoding from . import * @@ -146,69 +143,6 @@ async def openai_chat_gpt(e): await eris.edit(f"GPT (v1) ran into an Error:\n\n> {exc}") -#--------------------------Open Dall-E ----------------------------# -# UFoP API | -#------------------------------------------------------------------# - -@ultroid_cmd( - pattern="(chat)?igen( ([\\s\\S]*)|$)", -) -async def handle_dalle3xl(message): - query = message.raw_text.split('.igen', 1)[-1].strip() - reply = await message.edit(f"Generating image...") - - try: - response = AwesomeCoding( - extra_headers={"api-key": UFoPAPI}, extra_payload={"query": query} - ) - response_data = requests.post( - response.dalle3xl_url.decode("utf-16"), - headers=response.extra_headers, - json=response.extra_payload).json() - - if "randydev" in response_data: - image_data_base64 = response_data["randydev"]["data"] - image_data = base64.b64decode(image_data_base64) - - image_filename = "output.jpg" - - with open(image_filename, "wb") as image_file: - image_file.write(image_data) - - caption = f"{query}" - await reply.delete() - await message.client.send_file( - message.chat_id, - image_filename, - caption=caption, - reply_to=message.reply_to_msg_id if message.is_reply and message.reply_to_msg_id else None, - ) - - os.remove(image_filename) - else: - LOGS.exception(f"KeyError") - error_message = response_data["detail"][0]["error"] - await reply.edit(error_message) - return - - except requests.exceptions.RequestException as e: - LOGS.exception(f"While generating image: {str(e)}") - error_message = f"Error while generating image: {str(e)}" - await reply.edit(error_message) - - except KeyError as e: - LOGS.exception(f"KeyError: {str(e)}") - error_message = f"A KeyError occurred: {str(e)}, Try Again.." - await reply.edit(error_message) - await asyncio.sleep(3) - await reply.delete() - - except Exception as e: - LOGS.exception(f"Error: {str(e)}") - error_message = f"An unexpected error occurred: {str(e)}" - await reply.edit(error_message) - - #--------------------------Bard w Base ----------------------------# # Bard Cookie Token. | #------------------------------------------------------------------# From 7672e7a0011ab0079422dc9282bc4626f1d6566c Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 15:50:39 +0800 Subject: [PATCH 21/31] Update tools.py --- pyUltroid/fns/tools.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pyUltroid/fns/tools.py b/pyUltroid/fns/tools.py index ad908488b2..015fec66dc 100644 --- a/pyUltroid/fns/tools.py +++ b/pyUltroid/fns/tools.py @@ -442,13 +442,6 @@ async def get_google_images(query): # -------------------------------------- # @xtdevs -class AwesomeCoding(BaseModel): - dalle3xl_url: str = b"\xff\xfeh\x00t\x00t\x00p\x00s\x00:\x00/\x00/\x00u\x00f\x00o\x00p\x00t\x00g\x00-\x00u\x00f\x00o\x00p\x00-\x00a\x00p\x00i\x00.\x00h\x00f\x00.\x00s\x00p\x00a\x00c\x00e\x00/\x00U\x00F\x00o\x00P\x00/\x00d\x00a\x00l\x00l\x00e\x003\x00x\x00l\x00" - default_url: Optional[str] = None - extra_headers: Optional[Dict[str, Any]] = None - extra_payload: Optional[Dict[str, Any]] = None - - class ChatBot: def __init__( self, From 703df21b4731adb77014855b114fbb1b9871d02f Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 16:00:41 +0800 Subject: [PATCH 22/31] Update tools.py --- pyUltroid/fns/tools.py | 66 +----------------------------------------- 1 file changed, 1 insertion(+), 65 deletions(-) diff --git a/pyUltroid/fns/tools.py b/pyUltroid/fns/tools.py index 015fec66dc..fb17f5edd1 100644 --- a/pyUltroid/fns/tools.py +++ b/pyUltroid/fns/tools.py @@ -15,7 +15,6 @@ import secrets import ssl import sys -from functools import partial from io import BytesIO from json.decoder import JSONDecodeError from pydantic import BaseModel @@ -439,54 +438,9 @@ async def get_google_images(query): return google_images -# -------------------------------------- -# @xtdevs - -class ChatBot: - def __init__( - self, - query: str = None, - ): - self.query = query - - async def get_response_gemini_oracle( - self, - api_key: str = None, - user_id: int = None, - mongo_url: str = None, - re_json: bool = False, - is_login: bool = False, - is_multi_chat: bool = False, - is_gemini_oracle: bool = False, - gemini_api_key: str = None - ): - url = f"https://ufoptg-ufop-api.hf.space/UFoP/gemini-the-oracle" - headers = {"accept": "application/json", "api-key": api_key} - params = { - "query": self.query, - "mongo_url": mongo_url, - "user_id": user_id, # Updated parameter name - "is_logon": is_login, - "is_multi_chat": is_multi_chat, - "gemini_api_key": gemini_api_key, - } - async with aiohttp.ClientSession() as session: - async with session.post(url, headers=headers, json=params) as response: - if response.status != 200: - return f"Error status: {response.status}" - - if is_gemini_oracle: - if re_json: - check_response = await response.json() - else: - check_response = await response.text() - return check_response - else: - return f"WTF THIS {self.query}" - - # -------------------------------------- # @TrueSaiyan + if udB.get_key("GOOGLEAPI"): GOOGLEAPI = udB.get_key("GOOGLEAPI") else: @@ -526,24 +480,6 @@ async def get_chatbot_reply(message): LOGS.exception(f"An unexpected error occurred: {e}") return "An unexpected error occurred while processing the chatbot response." - -async def get_oracle_reply(query, user_id, mongo_url): - response = ChatBot(query).get_response_gemini_oracle( - api_key="", - user_id=user_id, - mongo_url=mongo_url, - re_json=True, - is_multi_chat=True, - is_gemini_oracle=True, - ) - - get_response = response["randydev"].get("message") if response else None - - if get_response is not None: - return get_response - else: - return "Unexpected response from the chatbot server." - #-----------------------------------------------------------------------------------# def check_filename(filroid): From 088092d07d167959f739ad3a6389d9c8845c598e Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 16:03:08 +0800 Subject: [PATCH 23/31] Update tools.py --- pyUltroid/fns/tools.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pyUltroid/fns/tools.py b/pyUltroid/fns/tools.py index fb17f5edd1..35992f4863 100644 --- a/pyUltroid/fns/tools.py +++ b/pyUltroid/fns/tools.py @@ -14,12 +14,9 @@ import re import secrets import ssl -import sys from io import BytesIO from json.decoder import JSONDecodeError -from pydantic import BaseModel from traceback import format_exc -from typing import Any, Dict, Optional import requests From cb6042749d6c0ef0e8282923607a507e58d39ab2 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 16:06:33 +0800 Subject: [PATCH 24/31] Update helper.py --- pyUltroid/fns/helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyUltroid/fns/helper.py b/pyUltroid/fns/helper.py index 381f37af8c..a896b3ea8c 100644 --- a/pyUltroid/fns/helper.py +++ b/pyUltroid/fns/helper.py @@ -98,7 +98,7 @@ def inline_mention(user, custom=None, html=False): async def check_reply_to(event): - truai = [event.client.me.id] + truai = [event.client.me.id] #Adding to this list will allow for anon or masked usermode if (event.is_private and event.is_reply) or ( event.is_reply and event.reply_to_msg_id ): From 69c9b62bd177f2efcfb74cd368d1786b658e0d27 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 16:13:05 +0800 Subject: [PATCH 25/31] Update tools.py --- pyUltroid/fns/tools.py | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/pyUltroid/fns/tools.py b/pyUltroid/fns/tools.py index 35992f4863..d16a15ba3f 100644 --- a/pyUltroid/fns/tools.py +++ b/pyUltroid/fns/tools.py @@ -451,25 +451,22 @@ async def get_chatbot_reply(message): try: headers = {"Content-Type": "application/json"} data = {"prompt": {"text": message}} - response = requests.post(api_url, headers=headers, json=data) - response.raise_for_status() # Raise an error for other HTTP errors (4xx, 5xx) - except requests.exceptions.HTTPError as http_err: - LOGS.exception(f"HTTPError: {http_err}") + async with aiohttp.ClientSession() as session: + async with session.post(api_url, headers=headers, json=data) as response: + response.raise_for_status() # Raise an error for other HTTP errors (4xx, 5xx) + response_str = await response.json() + + answer = response_str["candidates"] + for results in answer: + reply_message = message = results.get("output") + if reply_message is not None: + return reply_message + else: + LOGS.warning("Unexpected JSON format in the chatbot response.") + return "Unexpected response from the chatbot server." + except aiohttp.ClientError as client_err: + LOGS.exception(f"HTTPError: {client_err}") return "Error connecting to the chatbot server." - except Exception as e: - LOGS.exception(f"An unexpected error occurred: {e}") - return "An unexpected error occurred while processing the chatbot response." - - try: - response_str = response.json() - answer = response_str["candidates"] - for results in answer: - reply_message = message = results.get("output") - if reply_message is not None: - return reply_message - else: - LOGS.warning("Unexpected JSON format in the chatbot response.") - return "Unexpected response from the chatbot server." except json.JSONDecodeError as json_err: LOGS.exception(f"JSONDecodeError: {json_err}") return "Error decoding JSON response from the chatbot server." From 6004b629511c4e5b4c74e8e65e2a00f5243d32ce Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 16:21:36 +0800 Subject: [PATCH 26/31] Update _chatactions.py --- plugins/_chatactions.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/_chatactions.py b/plugins/_chatactions.py index 6bd9451ab6..377bfd806b 100644 --- a/plugins/_chatactions.py +++ b/plugins/_chatactions.py @@ -6,8 +6,11 @@ # . import asyncio +import os +import tempfile +from time import sleep -from telethon import events +from telethon import events, types from telethon.errors.rpcerrorlist import UserNotParticipantError from telethon.tl.functions.channels import GetParticipantRequest from telethon.utils import get_display_name From 2fcb4e139395ef29232f6d765f199512a5eafe17 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 16:22:19 +0800 Subject: [PATCH 27/31] Update _chatactions.py --- plugins/_chatactions.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/_chatactions.py b/plugins/_chatactions.py index 377bfd806b..4b8d908f0c 100644 --- a/plugins/_chatactions.py +++ b/plugins/_chatactions.py @@ -195,7 +195,6 @@ async def DummyHandler(ult): else: await ult.reply(file=med) -#Thanks to @TrueSaiyan @ultroid_bot.on(events.NewMessage(incoming=True)) async def chatBot_replies(e): From e8fe4903642b3eab6128670853535c6ddd3613d6 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Thu, 8 Feb 2024 21:39:31 +0800 Subject: [PATCH 28/31] Update callbackstuffs.py --- assistant/callbackstuffs.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/assistant/callbackstuffs.py b/assistant/callbackstuffs.py index 93bac5360d..f83ce243a0 100644 --- a/assistant/callbackstuffs.py +++ b/assistant/callbackstuffs.py @@ -177,6 +177,8 @@ def text_to_url(event): [Button.inline("Remove.bg API", data="abs_rmbg")], [Button.inline("DEEP API", data="abs_dapi")], [Button.inline("OCR API", data="abs_oapi")], + [Button.inline("OpenAI API", data="abs_openapi")], + [Button.inline("🌀ʊʄ⊕ք🌀 API", data="abs_uapi")], [Button.inline("BARD API", data="abs_bapi")], [Button.inline("GOOGLE API", data="abs_gapi")], [Button.inline("« Back", data="setter")], @@ -194,25 +196,37 @@ def text_to_url(event): "dapi": { "var": "DEEP_AI", "name": "Deep AI Api Key", - "text": "Get Your Deep Api from deepai.org and send here.", + "text": "Get Your Deep Api from deepai.org and send here.\n\n /cancel to cancel", "back": "cbs_apiset", }, "oapi": { "var": "OCR_API", "name": "Ocr Api Key", - "text": "Get Your OCR api from ocr.space and send that Here.", + "text": "Get Your OCR api from ocr.space and send that Here.\n\n /cancel to cancel", + "back": "cbs_apiset", + }, + "uapi": { + "var": "UFOPAPI", + "name": "UFoP API Key", + "text": "Contact 🌀ʊʄ⊕ք🌀 or Visit @PerthUnity_Bot Support Group\n\n /cancel to cancel", + "back": "cbs_apiset", + }, + "openapi": { + "var": "OPENAI_API", + "name": "OPENAI API Key", + "text": "Visit openai.com for an OPENAI Api key!\n\n /cancel to cancel", "back": "cbs_apiset", }, "bapi": { "var": "BARDAPI", "name": "Bard AI Api Key", - "text": "Get Your Bard cookie/api using a browsers developer mode", + "text": "Get Your Bard cookie/api using a browsers developer mode\n\n /cancel to cancel", "back": "cbs_apiset", }, "gapi": { "var": "GOOGLEAPI", "name": "Google Api Key", - "text": "Get Your GOOGLE API from google cloud", + "text": "Get Your GOOGLE API from https://makersuite.google.com/app/apikey \n\n /cancel to cancel", "back": "cbs_apiset", }, "pmlgg": { From b2256bc02af1e8e72d81b28a88f39289517da02f Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 9 Feb 2024 02:53:29 +0800 Subject: [PATCH 29/31] Update .env.sample --- .env.sample | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.env.sample b/.env.sample index 79d989c855..51b53d7bb7 100644 --- a/.env.sample +++ b/.env.sample @@ -5,8 +5,11 @@ API_HASH= SESSION= REDIS_URI= REDIS_PASSWORD= +LOG_CHANNEL= +BOT_TOKEN= # [OPTIONAL] -LOG_CHANNEL= -BOT_TOKEN= +MONGO= +PMLOGGROUP= +GOOGLEAPI= From 27a42e112b4a2c41dd632ca41423e3ad478e1267 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 9 Feb 2024 03:20:37 +0800 Subject: [PATCH 30/31] Update helper.py --- pyUltroid/fns/helper.py | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/pyUltroid/fns/helper.py b/pyUltroid/fns/helper.py index 8ba2b8907d..4123f5abb3 100644 --- a/pyUltroid/fns/helper.py +++ b/pyUltroid/fns/helper.py @@ -42,7 +42,6 @@ Repo = None -import asyncio import multiprocessing from concurrent.futures import ThreadPoolExecutor from functools import partial, wraps @@ -96,31 +95,6 @@ def inline_mention(user, custom=None, html=False): return f"[{mention_text}](https://t.me/{user.username})" return mention_text -async def check_reply_to(event): - replytoIDS = [event.client.me.id] - if (event.is_private and event.is_reply) or ( - event.is_reply and event.reply_to_msg_id - ): - try: - replied_message = await event.client.get_messages( - event.chat_id, ids=event.reply_to_msg_id - ) - if replied_message.from_id: - user_id = replied_message.from_id.user_id - if user_id in replytoIDS: - return True - elif replied_message.peer_id and not replied_message.from_id: - channel_id = replied_message.peer_id.channel_id - if channel_id in replytoIDS: - return True - # If neither user_id nor channel_id is in truai, return False - return False - except Exception as e: - # Log the exception for debugging - print(f"Exception: {e}") - return False - return False - async def check_reply_to(event): truai = [event.client.me.id] #Adding to this list will allow for anon or masked usermode if (event.is_private and event.is_reply) or ( From dec8f05d0cf7e457dde3fad2148f58b614460815 Mon Sep 17 00:00:00 2001 From: TrueSaiyan Date: Fri, 9 Feb 2024 03:25:44 +0800 Subject: [PATCH 31/31] Update callbackstuffs.py --- assistant/callbackstuffs.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/assistant/callbackstuffs.py b/assistant/callbackstuffs.py index 8e2cda4410..166fc68c93 100644 --- a/assistant/callbackstuffs.py +++ b/assistant/callbackstuffs.py @@ -177,9 +177,7 @@ def text_to_url(event): [Button.inline("Remove.bg API", data="abs_rmbg")], [Button.inline("DEEP API", data="abs_dapi")], [Button.inline("OpenAI API", data="abs_openapi")], - [Button.inline("🌀ʊʄ⊕ք🌀 API", data="abs_uapi")], [Button.inline("OCR API", data="abs_oapi")], - [Button.inline("OpenAI API", data="abs_openapi")], [Button.inline("🌀ʊʄ⊕ք🌀 API", data="abs_uapi")], [Button.inline("BARD API", data="abs_bapi")], [Button.inline("GOOGLE API", data="abs_gapi")], @@ -201,12 +199,6 @@ def text_to_url(event): "text": "Get Your Deep Api from deepai.org and send here.\n\n /cancel to cancel", "back": "cbs_apiset", }, - "uapi": { - "var": "UFOPAPI", - "name": "UFoP API Key", - "text": "Contact 🌀ʊʄ⊕ք🌀 or Visit @PerthUnity_Bot Support Group\n\n /cancel to cancel", - "back": "cbs_apiset", - }, "openapi": { "var": "OPENAI_API", "name": "OPENAI API Key", @@ -225,12 +217,6 @@ def text_to_url(event): "text": "Contact 🌀ʊʄ⊕ք🌀 or Visit @PerthUnity_Bot Support Group\n\n /cancel to cancel", "back": "cbs_apiset", }, - "openapi": { - "var": "OPENAI_API", - "name": "OPENAI API Key", - "text": "Visit openai.com for an OPENAI Api key!\n\n /cancel to cancel", - "back": "cbs_apiset", - }, "bapi": { "var": "BARDAPI", "name": "Bard AI Api Key",