diff --git a/apps/BingBot/bing_bot.py b/apps/BingBot/bing_bot.py
index 4a562411..233ca9a7 100644
--- a/apps/BingBot/bing_bot.py
+++ b/apps/BingBot/bing_bot.py
@@ -9,41 +9,46 @@ from dotenv import load_dotenv
load_dotenv()
-bot = commands.Bot(command_prefix='!', intents = discord.Intents.all())
+bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())
# init loggger
logger = src.log.setup_logger(__name__)
+
def restart_bot():
# Replace current process with new instance of bot.py
os.execl(sys.executable, sys.executable, "bot.py")
+
def check_verion() -> None:
# Read the requirements.txt file and add each line to a list
- with open('requirements.txt') as f:
+ with open("requirements.txt") as f:
required = f.read().splitlines()
# For each library listed in requirements.txt, check if the corresponding version is installed
for package in required:
# Use the pkg_resources library to get information about the installed version of the library
- package_name, package_verion = package.split('==')
+ package_name, package_verion = package.split("==")
installed = pkg_resources.get_distribution(package_name)
# Extract the library name and version number
name, version = installed.project_name, installed.version
# Compare the version number to see if it matches the one in requirements.txt
- if package != f'{name}=={version}':
- logger.error(f'{name} version {version} is installed but does not match the requirements')
+ if package != f"{name}=={version}":
+ logger.error(
+ f"{name} version {version} is installed but does not match the requirements"
+ )
sys.exit()
+
@bot.event
async def on_ready():
bot_status = discord.Status.online
- bot_activity = discord.Activity(type=discord.ActivityType.playing, name = "bing.com")
- await bot.change_presence(status = bot_status, activity = bot_activity)
- for Filename in os.listdir('./cogs'):
- if Filename.endswith('.py'):
- await bot.load_extension(f'cogs.{Filename[:-3]}')
- logger.info(f'{bot.user} is now running!')
+ bot_activity = discord.Activity(type=discord.ActivityType.playing, name="bing.com")
+ await bot.change_presence(status=bot_status, activity=bot_activity)
+ for Filename in os.listdir("./cogs"):
+ if Filename.endswith(".py"):
+ await bot.load_extension(f"cogs.{Filename[:-3]}")
+ logger.info(f"{bot.user} is now running!")
print("Bot is Up and Ready!")
try:
synced = await bot.tree.sync()
@@ -51,39 +56,44 @@ async def on_ready():
except Exception as e:
print(e)
+
# Load command
-@commands.is_owner()
+@commands.is_owner()
@bot.command()
async def load(ctx, extension):
- await bot.load_extension(f'cogs.{extension}')
- await ctx.author.send(f'> **Loaded {extension} done.**')
+ await bot.load_extension(f"cogs.{extension}")
+ await ctx.author.send(f"> **Loaded {extension} done.**")
+
# Unload command
@commands.is_owner()
@bot.command()
async def unload(ctx, extension):
- await bot.unload_extension(f'cogs.{extension}')
- await ctx.author.send(f'> **Un-Loaded {extension} done.**')
+ await bot.unload_extension(f"cogs.{extension}")
+ await ctx.author.send(f"> **Un-Loaded {extension} done.**")
+
# Empty discord_bot.log file
@commands.is_owner()
@bot.command()
async def clean(ctx):
- open('discord_bot.log', 'w').close()
- await ctx.author.send(f'> **Successfully emptied the file!**')
+ open("discord_bot.log", "w").close()
+ await ctx.author.send(f"> **Successfully emptied the file!**")
+
# Get discord_bot.log file
@commands.is_owner()
@bot.command()
async def getLog(ctx):
try:
- with open('discord_bot.log', 'rb') as f:
+ with open("discord_bot.log", "rb") as f:
file = discord.File(f)
await ctx.author.send(file=file)
await ctx.author.send("> **Send successfully!**")
except:
await ctx.author.send("> **Send failed!**")
+
# Upload new Bing cookies and restart the bot
@commands.is_owner()
@bot.command()
@@ -92,11 +102,11 @@ async def upload(ctx):
for attachment in ctx.message.attachments:
if str(attachment)[-4:] == ".txt":
content = await attachment.read()
- with open("cookies.json", "w", encoding = "utf-8") as f:
- json.dump(json.loads(content), f, indent = 2)
+ with open("cookies.json", "w", encoding="utf-8") as f:
+ json.dump(json.loads(content), f, indent=2)
if not isinstance(ctx.channel, discord.abc.PrivateChannel):
await ctx.message.delete()
- await ctx.author.send(f'> **Upload new cookies successfully!**')
+ await ctx.author.send(f"> **Upload new cookies successfully!**")
logger.warning("\x1b[31mCookies has been setup successfully\x1b[0m")
restart_bot()
else:
@@ -104,12 +114,7 @@ async def upload(ctx):
else:
await ctx.author.send("> **Didn't get any file.**")
-if __name__ == '__main__':
+
+if __name__ == "__main__":
check_verion()
bot.run(os.getenv("DISCORD_BOT_TOKEN"))
-
-
-
-
-
-
diff --git a/apps/BingBot/cogs/edgegpt.py b/apps/BingBot/cogs/edgegpt.py
index 683780db..6b303418 100644
--- a/apps/BingBot/cogs/edgegpt.py
+++ b/apps/BingBot/cogs/edgegpt.py
@@ -19,6 +19,7 @@ users_chatbot = {}
users_image_generator = {}
user_conversation_style = {}
+
async def init_chatbot(user_id):
with open("./cookies.json", encoding="utf-8") as file:
cookie_json = json.load(file)
@@ -26,7 +27,7 @@ async def init_chatbot(user_id):
if cookie.get("name") == "_U":
auth_cookie = cookie.get("value")
break
-
+
auth_cookie = os.environ.get("AUTH_COOKIE")
auth_cookie_SRCHHPGUSR = os.environ.get("AUTH_COOKIE_SRCHHPGUSR")
# auth_cookie_SRCHHPGUSR = os.environ.get("AUTH_COOKIE_SRCHHPGUSR")
@@ -34,6 +35,7 @@ async def init_chatbot(user_id):
users_image_generator[user_id] = ImageGenAsync(auth_cookie, quiet=True)
user_conversation_style[user_id] = "balanced"
+
class UserChatbot:
def __init__(self, cookies):
self.chatbot = Chatbot(cookies=cookies)
@@ -47,6 +49,7 @@ class UserChatbot:
async def reset(self):
await self.chatbot.reset()
+
class EdgeGPT(Cog_Extension):
# Chat with Bing
@app_commands.command(name="bing", description="Have a chat with Bing")
@@ -57,7 +60,7 @@ class EdgeGPT(Cog_Extension):
await set_using_send(interaction.user.id, False)
using = await get_using_send(interaction.user.id)
if not using:
- await interaction.response.defer(ephemeral=False, thinking=True)
+ await interaction.response.defer(ephemeral=False, thinking=True)
username = str(interaction.user)
usermessage = message
channel = str(interaction.channel)
@@ -65,11 +68,17 @@ class EdgeGPT(Cog_Extension):
if user_id not in users_chatbot:
await init_chatbot(interaction.user.id)
conversation_style = user_conversation_style[user_id]
- logger.info(f"\x1b[31m{username}\x1b[0m : '{usermessage}' ({channel}) [Style: {conversation_style}]")
- await users_chatbot[user_id].send_message(interaction, usermessage, conversation_style)
+ logger.info(
+ f"\x1b[31m{username}\x1b[0m : '{usermessage}' ({channel}) [Style: {conversation_style}]"
+ )
+ await users_chatbot[user_id].send_message(
+ interaction, usermessage, conversation_style
+ )
else:
await interaction.response.defer(ephemeral=True, thinking=True)
- await interaction.followup.send("> **Please wait for your last conversation to finish.**")
+ await interaction.followup.send(
+ "> **Please wait for your last conversation to finish.**"
+ )
# Reset Bing conversation
@app_commands.command(name="reset", description="Reset Bing conversation")
@@ -81,25 +90,49 @@ class EdgeGPT(Cog_Extension):
await interaction.followup.send("> **Info: Reset finish.**")
logger.warning("\x1b[31mBing has been successfully reset\x1b[0m")
except:
- await interaction.followup.send(f"> **You don't have any conversation yet.**")
+ await interaction.followup.send(
+ f"> **You don't have any conversation yet.**"
+ )
logger.exception("Bing reset failed.")
# Switch conversation style
@app_commands.command(name="switch_style", description="Switch conversation style")
- @app_commands.choices(style=[app_commands.Choice(name="Creative", value="creative"), app_commands.Choice(name="Balanced", value="balanced"), app_commands.Choice(name="Precise", value="precise")])
- async def switch_style(self, interaction: discord.Interaction, style: app_commands.Choice[str]):
+ @app_commands.choices(
+ style=[
+ app_commands.Choice(name="Creative", value="creative"),
+ app_commands.Choice(name="Balanced", value="balanced"),
+ app_commands.Choice(name="Precise", value="precise"),
+ ]
+ )
+ async def switch_style(
+ self, interaction: discord.Interaction, style: app_commands.Choice[str]
+ ):
await interaction.response.defer(ephemeral=True, thinking=True)
user_id = interaction.user.id
if user_id not in users_chatbot:
await init_chatbot(user_id)
user_conversation_style[user_id] = style.value
- await interaction.followup.send(f"> **Info: successfull switch conversation style to {style.value}.**")
- logger.warning(f"\x1b[31mConversation style has been successfully switch to {style.value}\x1b[0m")
-
+ await interaction.followup.send(
+ f"> **Info: successfull switch conversation style to {style.value}.**"
+ )
+ logger.warning(
+ f"\x1b[31mConversation style has been successfully switch to {style.value}\x1b[0m"
+ )
+
# Set and delete personal Bing Cookies
@app_commands.command(name="bing_cookies", description="Set or delete Bing Cookies")
- @app_commands.choices(choice=[app_commands.Choice(name="set", value="set"), app_commands.Choice(name="delete", value="delete")])
- async def cookies_setting(self, interaction: discord.Interaction, choice: app_commands.Choice[str], cookies_file: Optional[discord.Attachment]=None):
+ @app_commands.choices(
+ choice=[
+ app_commands.Choice(name="set", value="set"),
+ app_commands.Choice(name="delete", value="delete"),
+ ]
+ )
+ async def cookies_setting(
+ self,
+ interaction: discord.Interaction,
+ choice: app_commands.Choice[str],
+ cookies_file: Optional[discord.Attachment] = None,
+ ):
await interaction.response.defer(ephemeral=True, thinking=True)
user_id = interaction.user.id
if choice.value == "set":
@@ -111,11 +144,15 @@ class EdgeGPT(Cog_Extension):
break
users_image_generator[user_id] = ImageGenAsync(auth_cookie, quiet=True)
users_chatbot[user_id] = UserChatbot(cookies=content)
- user_conversation_style[user_id] = "balanced"
+ user_conversation_style[user_id] = "balanced"
await interaction.followup.send("> **Upload successful!**")
- logger.warning(f"\x1b[31m{interaction.user} set Bing Cookies successful\x1b[0m")
+ logger.warning(
+ f"\x1b[31m{interaction.user} set Bing Cookies successful\x1b[0m"
+ )
except:
- await interaction.followup.send("> **Please upload your Bing Cookies.**")
+ await interaction.followup.send(
+ "> **Please upload your Bing Cookies.**"
+ )
else:
try:
del users_chatbot[user_id]
@@ -124,10 +161,14 @@ class EdgeGPT(Cog_Extension):
await interaction.followup.send("> **Delete finish.**")
logger.warning(f"\x1b[31m{interaction.user} delete Cookies\x1b[0m")
except:
- await interaction.followup.send("> **You don't have any Bing Cookies.**")
+ await interaction.followup.send(
+ "> **You don't have any Bing Cookies.**"
+ )
# Create images
- @app_commands.command(name="create_image", description="generate image by Bing image creator")
+ @app_commands.command(
+ name="create_image", description="generate image by Bing image creator"
+ )
async def create_image(self, interaction: discord.Interaction, *, prompt: str):
user_id = interaction.user.id
if interaction.user.id not in users_chatbot:
@@ -137,12 +178,19 @@ class EdgeGPT(Cog_Extension):
except:
await set_using_create(user_id, False)
using = await get_using_create(user_id)
- if not using:
- logger.info(f"\x1b[31m{interaction.user}\x1b[0m : '{prompt}' ({interaction.channel}) [BingImageCreator]")
- await users_chatbot[user_id].create_image(interaction, prompt, users_image_generator[user_id] )
+ if not using:
+ logger.info(
+ f"\x1b[31m{interaction.user}\x1b[0m : '{prompt}' ({interaction.channel}) [BingImageCreator]"
+ )
+ await users_chatbot[user_id].create_image(
+ interaction, prompt, users_image_generator[user_id]
+ )
else:
await interaction.response.defer(ephemeral=True, thinking=True)
- await interaction.followup.send("> **Please wait for your last image to create finish.**")
+ await interaction.followup.send(
+ "> **Please wait for your last image to create finish.**"
+ )
+
async def setup(bot):
await bot.add_cog(EdgeGPT(bot))
diff --git a/apps/BingBot/cogs/event.py b/apps/BingBot/cogs/event.py
index f42b6e5b..9b81cf30 100644
--- a/apps/BingBot/cogs/event.py
+++ b/apps/BingBot/cogs/event.py
@@ -25,64 +25,101 @@ with open("./cookies.json", encoding="utf-8") as file:
cookies = json.load(file)
chatbot = Chatbot(cookies=cookies)
+
# To add suggest responses
class MyView(discord.ui.View):
- def __init__(self, chatbot: Chatbot, suggest_responses:list):
+ def __init__(self, chatbot: Chatbot, suggest_responses: list):
super().__init__(timeout=120)
# Add buttons
for label in suggest_responses:
button = discord.ui.Button(label=label)
+
# Button event
- async def callback(interaction: discord.Interaction, button: discord.ui.Button):
- await interaction.response.defer(ephemeral=False, thinking=True)
- # When click the button, all buttons will disable.
- for child in self.children:
- child.disabled = True
- await interaction.followup.edit_message(message_id=interaction.message.id, view=self)
- username = str(interaction.user)
- usermessage = button.label
- channel = str(interaction.channel)
- logger.info(f"\x1b[31m{username}\x1b[0m : '{usermessage}' ({channel}) [Style: {conversation_style}] [button]")
- task = asyncio.create_task(send_message(chatbot, interaction, usermessage))
- await asyncio.gather(task)
+ async def callback(
+ interaction: discord.Interaction, button: discord.ui.Button
+ ):
+ await interaction.response.defer(ephemeral=False, thinking=True)
+ # When click the button, all buttons will disable.
+ for child in self.children:
+ child.disabled = True
+ await interaction.followup.edit_message(
+ message_id=interaction.message.id, view=self
+ )
+ username = str(interaction.user)
+ usermessage = button.label
+ channel = str(interaction.channel)
+ logger.info(
+ f"\x1b[31m{username}\x1b[0m : '{usermessage}' ({channel}) [Style: {conversation_style}] [button]"
+ )
+ task = asyncio.create_task(
+ send_message(chatbot, interaction, usermessage)
+ )
+ await asyncio.gather(task)
+
self.add_item(button)
self.children[-1].callback = partial(callback, button=button)
+
+
# Show Dropdown
class DropdownView(discord.ui.View):
def __init__(self):
super().__init__(timeout=180)
options = [
- discord.SelectOption(label="Creative", description="Switch conversation style to Creative", emoji='🎨'),
- discord.SelectOption(label="Balanced", description="Switch conversation style to Balanced", emoji='⚖️'),
- discord.SelectOption(label="Precise", description="Switch conversation style to Precise", emoji='🔎'),
- discord.SelectOption(label="Reset", description="Reset conversation", emoji="🔄")
+ discord.SelectOption(
+ label="Creative",
+ description="Switch conversation style to Creative",
+ emoji="🎨",
+ ),
+ discord.SelectOption(
+ label="Balanced",
+ description="Switch conversation style to Balanced",
+ emoji="⚖️",
+ ),
+ discord.SelectOption(
+ label="Precise",
+ description="Switch conversation style to Precise",
+ emoji="🔎",
+ ),
+ discord.SelectOption(
+ label="Reset", description="Reset conversation", emoji="🔄"
+ ),
]
dropdown = discord.ui.Select(
- placeholder="Choose setting",
- min_values=1,
- max_values=1,
- options=options
+ placeholder="Choose setting", min_values=1, max_values=1, options=options
)
dropdown.callback = self.dropdown_callback
self.add_item(dropdown)
+
# Dropdown event
async def dropdown_callback(self, interaction: discord.Interaction):
await interaction.response.defer(ephemeral=False, thinking=True)
- if interaction.data['values'][0] == "Creative":
+ if interaction.data["values"][0] == "Creative":
await set_conversation_style("creative")
- await interaction.followup.send(f"> **Info: successfull switch conversation style to *{interaction.data['values'][0]}*.**")
- logger.warning(f"\x1b[31mConversation style has been successfully switch to {interaction.data['values'][0]}\x1b[0m")
- elif interaction.data['values'][0] == "Balanced":
+ await interaction.followup.send(
+ f"> **Info: successfull switch conversation style to *{interaction.data['values'][0]}*.**"
+ )
+ logger.warning(
+ f"\x1b[31mConversation style has been successfully switch to {interaction.data['values'][0]}\x1b[0m"
+ )
+ elif interaction.data["values"][0] == "Balanced":
await set_conversation_style("balanced")
- await interaction.followup.send(f"> **Info: successfull switch conversation style to *{interaction.data['values'][0]}*.**")
- logger.warning(f"\x1b[31mConversation style has been successfully switch to {interaction.data['values'][0]}\x1b[0m")
- elif interaction.data['values'][0] == "Precise":
+ await interaction.followup.send(
+ f"> **Info: successfull switch conversation style to *{interaction.data['values'][0]}*.**"
+ )
+ logger.warning(
+ f"\x1b[31mConversation style has been successfully switch to {interaction.data['values'][0]}\x1b[0m"
+ )
+ elif interaction.data["values"][0] == "Precise":
await set_conversation_style("precise")
- await interaction.followup.send(f"> **Info: successfull switch conversation style to *{interaction.data['values'][0]}*.**")
- logger.warning(f"\x1b[31mConversation style has been successfully switch to {interaction.data['values'][0]}\x1b[0m")
+ await interaction.followup.send(
+ f"> **Info: successfull switch conversation style to *{interaction.data['values'][0]}*.**"
+ )
+ logger.warning(
+ f"\x1b[31mConversation style has been successfully switch to {interaction.data['values'][0]}\x1b[0m"
+ )
else:
await chatbot.reset()
await interaction.followup.send(f"> **Info: Reset finish.**")
@@ -90,46 +127,66 @@ class DropdownView(discord.ui.View):
# disable dropdown after select
for dropdown in self.children:
dropdown.disabled = True
- await interaction.followup.edit_message(message_id=interaction.message.id, view=self)
+ await interaction.followup.edit_message(
+ message_id=interaction.message.id, view=self
+ )
+
# Set conversation style
async def set_conversation_style(style: str):
global conversation_style
conversation_style = style
+
+
async def set_chatbot(cookies):
global chatbot
chatbot = Chatbot(cookies=cookies)
+
async def send_message(chatbot: Chatbot, message, user_message: str):
async with sem:
if isinstance(message, discord.message.Message):
await message.channel.typing()
- reply = ''
- text = ''
- link_embed = ''
+ reply = ""
+ text = ""
+ link_embed = ""
images_embed = []
all_url = []
try:
- # Change conversation style
+ # Change conversation style
if conversation_style == "creative":
- reply = await chatbot.ask(prompt=user_message, conversation_style=ConversationStyle.creative, simplify_response=True)
+ reply = await chatbot.ask(
+ prompt=user_message,
+ conversation_style=ConversationStyle.creative,
+ simplify_response=True,
+ )
elif conversation_style == "precise":
- reply = await chatbot.ask(prompt=user_message, conversation_style=ConversationStyle.precise, simplify_response=True)
+ reply = await chatbot.ask(
+ prompt=user_message,
+ conversation_style=ConversationStyle.precise,
+ simplify_response=True,
+ )
else:
- reply = await chatbot.ask(prompt=user_message, conversation_style=ConversationStyle.balanced, simplify_response=True)
+ reply = await chatbot.ask(
+ prompt=user_message,
+ conversation_style=ConversationStyle.balanced,
+ simplify_response=True,
+ )
# Get reply text
text = f"{reply['text']}"
- text = re.sub(r'\[\^(\d+)\^\]', lambda match: '', text)
+ text = re.sub(r"\[\^(\d+)\^\]", lambda match: "", text)
# Get the URL, if available
try:
- if len(reply['sources']) != 0:
- for i, url in enumerate(reply['sources'], start=1):
- if len(url['providerDisplayName']) == 0:
+ if len(reply["sources"]) != 0:
+ for i, url in enumerate(reply["sources"], start=1):
+ if len(url["providerDisplayName"]) == 0:
all_url.append(f"{i}. {url['seeMoreUrl']}")
else:
- all_url.append(f"{i}. [{url['providerDisplayName']}]({url['seeMoreUrl']})")
+ all_url.append(
+ f"{i}. [{url['providerDisplayName']}]({url['seeMoreUrl']})"
+ )
link_text = "\n".join(all_url)
link_embed = discord.Embed(description=link_text)
except:
@@ -147,45 +204,80 @@ async def send_message(chatbot: Chatbot, message, user_message: str):
while len(response) > 2000:
temp = response[:2000]
response = response[2000:]
- if isinstance(message, discord.interactions.Interaction):
+ if isinstance(message, discord.interactions.Interaction):
await message.followup.send(temp)
- else:
+ else:
await message.channel.send(temp)
# Get the image, if available
try:
if len(link_embed) == 0:
- all_image = re.findall("https?://[\w\./]+", str(reply["sources_text"]))
- [images_embed.append(discord.Embed(url="https://www.bing.com/").set_image(url=image_link)) for image_link in all_image]
+ all_image = re.findall(
+ "https?://[\w\./]+", str(reply["sources_text"])
+ )
+ [
+ images_embed.append(
+ discord.Embed(url="https://www.bing.com/").set_image(
+ url=image_link
+ )
+ )
+ for image_link in all_image
+ ]
except:
pass
-
+
if USE_SUGGEST_RESPONSES:
suggest_responses = reply["suggestions"]
if images_embed:
if isinstance(message, discord.interactions.Interaction):
- await message.followup.send(response, view=MyView(chatbot, suggest_responses), embeds=images_embed, wait=True)
+ await message.followup.send(
+ response,
+ view=MyView(chatbot, suggest_responses),
+ embeds=images_embed,
+ wait=True,
+ )
else:
- await message.channel.send(response, view=MyView(chatbot, suggest_responses), embeds=images_embed)
+ await message.channel.send(
+ response,
+ view=MyView(chatbot, suggest_responses),
+ embeds=images_embed,
+ )
elif link_embed:
if isinstance(message, discord.interactions.Interaction):
- await message.followup.send(response, view=MyView(chatbot, suggest_responses), embed=link_embed, wait=True)
+ await message.followup.send(
+ response,
+ view=MyView(chatbot, suggest_responses),
+ embed=link_embed,
+ wait=True,
+ )
else:
- await message.channel.send(response, view=MyView(chatbot, suggest_responses), embed=link_embed)
+ await message.channel.send(
+ response,
+ view=MyView(chatbot, suggest_responses),
+ embed=link_embed,
+ )
else:
if isinstance(message, discord.interactions.Interaction):
- await message.followup.send(response, view=MyView(chatbot, suggest_responses), wait=True)
+ await message.followup.send(
+ response, view=MyView(chatbot, suggest_responses), wait=True
+ )
else:
- await message.channel.send(response, view=MyView(chatbot, suggest_responses))
+ await message.channel.send(
+ response, view=MyView(chatbot, suggest_responses)
+ )
else:
if images_embed:
if isinstance(message, discord.interactions.Interaction):
- await message.followup.send(response, embeds=images_embed, wait=True)
+ await message.followup.send(
+ response, embeds=images_embed, wait=True
+ )
else:
await message.channel.send(response, embeds=images_embed)
elif link_embed:
if isinstance(message, discord.interactions.Interaction):
- await message.followup.send(response, embed=link_embed, wait=True)
+ await message.followup.send(
+ response, embed=link_embed, wait=True
+ )
else:
await message.channel.send(response, embed=link_embed)
else:
@@ -200,6 +292,7 @@ async def send_message(chatbot: Chatbot, message, user_message: str):
await message.channel.send(f">>> **Error: {e}**")
logger.exception(f"Error while sending message: {e}")
+
class Event(Cog_Extension):
@commands.Cog.listener()
async def on_message(self, message: discord.Message):
@@ -207,17 +300,22 @@ class Event(Cog_Extension):
return
if self.bot.user in message.mentions:
if not MENTION_CHANNEL_ID or message.channel.id == MENTION_CHANNEL_ID:
- content = re.sub(r'<@.*?>', '', message.content).strip()
+ content = re.sub(r"<@.*?>", "", message.content).strip()
if len(content) > 0:
username = str(message.author)
channel = str(message.channel)
- logger.info(f"\x1b[31m{username}\x1b[0m : '{content}' ({channel}) [Style: {conversation_style}]")
+ logger.info(
+ f"\x1b[31m{username}\x1b[0m : '{content}' ({channel}) [Style: {conversation_style}]"
+ )
task = asyncio.create_task(send_message(chatbot, message, content))
await asyncio.gather(task)
else:
await message.channel.send(view=DropdownView())
elif MENTION_CHANNEL_ID is not None:
- await message.channel.send(f"> **Can only be mentioned at <#{self.bot.get_channel(MENTION_CHANNEL_ID).id}>**")
+ await message.channel.send(
+ f"> **Can only be mentioned at <#{self.bot.get_channel(MENTION_CHANNEL_ID).id}>**"
+ )
+
async def setup(bot):
await bot.add_cog(Event(bot))
diff --git a/apps/BingBot/cogs/help.py b/apps/BingBot/cogs/help.py
index 16ecff78..eef6a61d 100644
--- a/apps/BingBot/cogs/help.py
+++ b/apps/BingBot/cogs/help.py
@@ -2,16 +2,35 @@ import discord
from core.classes import Cog_Extension
from discord import app_commands
+
class Help(Cog_Extension):
- @app_commands.command(name = "help", description = "Show how to use")
+ @app_commands.command(name="help", description="Show how to use")
async def help(self, interaction: discord.Interaction):
- embed=discord.Embed(title="Help", description="[see more](https://github.com/FuseFairy/DiscordBot-EdgeGPT/blob/main/README.md)\n\n**COMMANDS -**")
- embed.add_field(name="/bing_cookies", value="Set and delete your Bing Cookies.", inline=False)
+ embed = discord.Embed(
+ title="Help",
+ description="[see more](https://github.com/FuseFairy/DiscordBot-EdgeGPT/blob/main/README.md)\n\n**COMMANDS -**",
+ )
+ embed.add_field(
+ name="/bing_cookies",
+ value="Set and delete your Bing Cookies.",
+ inline=False,
+ )
embed.add_field(name="/bing", value="Chat with Bing.", inline=False)
- embed.add_field(name="/reset", value="Reset your Bing conversation.", inline=False)
- embed.add_field(name="/switch_style", value="Switch your Bing conversation style.", inline=False)
- embed.add_field(name="/create_image", value="Generate image by Bing Image Creator.", inline=False)
+ embed.add_field(
+ name="/reset", value="Reset your Bing conversation.", inline=False
+ )
+ embed.add_field(
+ name="/switch_style",
+ value="Switch your Bing conversation style.",
+ inline=False,
+ )
+ embed.add_field(
+ name="/create_image",
+ value="Generate image by Bing Image Creator.",
+ inline=False,
+ )
await interaction.response.send_message(embed=embed)
+
async def setup(bot):
- await bot.add_cog(Help(bot))
\ No newline at end of file
+ await bot.add_cog(Help(bot))
diff --git a/apps/BingBot/compose.yaml b/apps/BingBot/compose.yaml
index f574f912..64e278fa 100644
--- a/apps/BingBot/compose.yaml
+++ b/apps/BingBot/compose.yaml
@@ -1,7 +1,7 @@
version: '3'
services:
- discord_edgegpt:
+ BingBot:
build: .
environment:
- DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN}
diff --git a/apps/BingBot/core/classes.py b/apps/BingBot/core/classes.py
index 8dfdb114..23c4cbb1 100644
--- a/apps/BingBot/core/classes.py
+++ b/apps/BingBot/core/classes.py
@@ -1,5 +1,6 @@
from discord.ext import commands
+
class Cog_Extension(commands.Cog):
def __init__(self, bot):
self.bot = bot
diff --git a/apps/BingBot/src/imageCreate.py b/apps/BingBot/src/imageCreate.py
index b88d1d4b..0b68b44d 100644
--- a/apps/BingBot/src/imageCreate.py
+++ b/apps/BingBot/src/imageCreate.py
@@ -5,10 +5,14 @@ from src import log
logger = log.setup_logger(__name__)
using_func = {}
+
async def get_using_create(user_id):
return using_func[user_id]
+
+
async def set_using_create(user_id, status: bool):
- using_func[user_id] = status
+ using_func[user_id] = status
+
async def create_image(interaction: discord.Interaction, prompt: str, image_generator):
await interaction.response.defer(ephemeral=False, thinking=True)
@@ -16,10 +20,15 @@ async def create_image(interaction: discord.Interaction, prompt: str, image_gene
try:
embeds = []
prompts = f"> **{prompt}** - <@{str(interaction.user.id)}> (***BingImageCreator***)\n\n"
- # Fetches image links
+ # Fetches image links
images = await image_generator.get_images(prompt)
# Add embed to list of embeds
- [embeds.append(discord.Embed(url="https://www.bing.com/").set_image(url=image_link)) for image_link in images]
+ [
+ embeds.append(
+ discord.Embed(url="https://www.bing.com/").set_image(url=image_link)
+ )
+ for image_link in images
+ ]
await interaction.followup.send(prompts, embeds=embeds, wait=True)
except asyncio.TimeoutError:
await interaction.followup.send("> **Error: Request timed out.**")
@@ -28,4 +37,4 @@ async def create_image(interaction: discord.Interaction, prompt: str, image_gene
await interaction.followup.send(f"> **Error: {e}**")
logger.exception(f"Error while create image: {e}")
finally:
- using_func[interaction.user.id] = False
\ No newline at end of file
+ using_func[interaction.user.id] = False
diff --git a/apps/BingBot/src/log.py b/apps/BingBot/src/log.py
index fba4e94d..ed04a4a3 100644
--- a/apps/BingBot/src/log.py
+++ b/apps/BingBot/src/log.py
@@ -4,18 +4,17 @@ import logging.handlers
class CustomFormatter(logging.Formatter):
-
LEVEL_COLORS = [
- (logging.DEBUG, '\x1b[40;1m'),
- (logging.INFO, '\x1b[34;1m'),
- (logging.WARNING, '\x1b[33;1m'),
- (logging.ERROR, '\x1b[31m'),
- (logging.CRITICAL, '\x1b[41m'),
+ (logging.DEBUG, "\x1b[40;1m"),
+ (logging.INFO, "\x1b[34;1m"),
+ (logging.WARNING, "\x1b[33;1m"),
+ (logging.ERROR, "\x1b[31m"),
+ (logging.CRITICAL, "\x1b[41m"),
]
FORMATS = {
level: logging.Formatter(
- f'\x1b[30;1m%(asctime)s\x1b[0m {color}%(levelname)-8s\x1b[0m \x1b[35m%(name)s\x1b[0m -> %(message)s',
- '%Y-%m-%d %H:%M:%S'
+ f"\x1b[30;1m%(asctime)s\x1b[0m {color}%(levelname)-8s\x1b[0m \x1b[35m%(name)s\x1b[0m -> %(message)s",
+ "%Y-%m-%d %H:%M:%S",
)
for level, color in LEVEL_COLORS
}
@@ -28,7 +27,7 @@ class CustomFormatter(logging.Formatter):
# Override the traceback to always print in red
if record.exc_info:
text = formatter.formatException(record.exc_info)
- record.exc_text = f'\x1b[31m{text}\x1b[0m'
+ record.exc_text = f"\x1b[31m{text}\x1b[0m"
output = formatter.format(record)
@@ -37,9 +36,9 @@ class CustomFormatter(logging.Formatter):
return output
-def setup_logger(module_name:str) -> logging.Logger:
+def setup_logger(module_name: str) -> logging.Logger:
# create logger
- library, _, _ = module_name.partition('.py')
+ library, _, _ = module_name.partition(".py")
logger = logging.getLogger(library)
logger.setLevel(logging.INFO)
@@ -50,12 +49,12 @@ def setup_logger(module_name:str) -> logging.Logger:
console_handler.setFormatter(CustomFormatter())
# specify that the log file path is the same as `main.py` file path
grandparent_dir = os.path.abspath(__file__ + "/../../")
- log_name='discord_bot.log'
+ log_name = "discord_bot.log"
log_path = os.path.join(grandparent_dir, log_name)
# create local log handler
log_handler = logging.handlers.RotatingFileHandler(
filename=log_path,
- encoding='utf-8',
+ encoding="utf-8",
maxBytes=32 * 1024 * 1024, # 32 MiB
backupCount=2, # Rotate through 5 files
)
diff --git a/apps/BingBot/src/response.py b/apps/BingBot/src/response.py
index 371622b8..47960a73 100644
--- a/apps/BingBot/src/response.py
+++ b/apps/BingBot/src/response.py
@@ -8,79 +8,127 @@ USE_SUGGEST_RESPONSES = True
logger = log.setup_logger(__name__)
using_func = {}
+
# To add suggest responses
class MyView(discord.ui.View):
- def __init__(self, interaction: discord.Interaction, chatbot: Chatbot, conversation_style:str, suggest_responses:list):
+ def __init__(
+ self,
+ interaction: discord.Interaction,
+ chatbot: Chatbot,
+ conversation_style: str,
+ suggest_responses: list,
+ ):
super().__init__(timeout=120)
- self.button_author =interaction.user.id
+ self.button_author = interaction.user.id
# Add buttons
for label in suggest_responses:
button = discord.ui.Button(label=label)
+
# Button event
- async def callback(interaction: discord.Interaction, button_author: int, button: discord.ui.Button):
+ async def callback(
+ interaction: discord.Interaction,
+ button_author: int,
+ button: discord.ui.Button,
+ ):
if interaction.user.id != button_author:
await interaction.response.defer(ephemeral=True, thinking=True)
- await interaction.followup.send("You don't have permission to press this button.")
+ await interaction.followup.send(
+ "You don't have permission to press this button."
+ )
elif not using_func[interaction.user.id]:
await interaction.response.defer(ephemeral=False, thinking=True)
# When click the button, all buttons will disable.
for child in self.children:
child.disabled = True
- await interaction.followup.edit_message(message_id=interaction.message.id, view=self)
+ await interaction.followup.edit_message(
+ message_id=interaction.message.id, view=self
+ )
username = str(interaction.user)
usermessage = button.label
channel = str(interaction.channel)
- logger.info(f"\x1b[31m{username}\x1b[0m : '{usermessage}' ({channel}) [Style: {conversation_style}] [button]")
- await send_message(chatbot, interaction, usermessage, conversation_style)
+ logger.info(
+ f"\x1b[31m{username}\x1b[0m : '{usermessage}' ({channel}) [Style: {conversation_style}] [button]"
+ )
+ await send_message(
+ chatbot, interaction, usermessage, conversation_style
+ )
else:
await interaction.response.defer(ephemeral=True, thinking=True)
- await interaction.followup.send("Please wait for your last conversation to finish.")
+ await interaction.followup.send(
+ "Please wait for your last conversation to finish."
+ )
+
self.add_item(button)
- self.children[-1].callback = partial(callback, button_author=self.button_author, button=button)
+ self.children[-1].callback = partial(
+ callback, button_author=self.button_author, button=button
+ )
+
async def get_using_send(user_id):
return using_func[user_id]
+
+
async def set_using_send(user_id, status: bool):
using_func[user_id] = status
-async def send_message(chatbot: Chatbot, interaction: discord.Interaction, user_message: str, conversation_style: str):
+
+async def send_message(
+ chatbot: Chatbot,
+ interaction: discord.Interaction,
+ user_message: str,
+ conversation_style: str,
+):
using_func[interaction.user.id] = True
- reply = ''
- text = ''
- link_embed = ''
+ reply = ""
+ text = ""
+ link_embed = ""
images_embed = []
all_url = []
try:
# Change conversation style
if conversation_style == "creative":
- reply = await chatbot.ask(prompt=user_message, conversation_style=ConversationStyle.creative, simplify_response=True)
+ reply = await chatbot.ask(
+ prompt=user_message,
+ conversation_style=ConversationStyle.creative,
+ simplify_response=True,
+ )
elif conversation_style == "precise":
- reply = await chatbot.ask(prompt=user_message, conversation_style=ConversationStyle.precise, simplify_response=True)
+ reply = await chatbot.ask(
+ prompt=user_message,
+ conversation_style=ConversationStyle.precise,
+ simplify_response=True,
+ )
else:
- reply = await chatbot.ask(prompt=user_message, conversation_style=ConversationStyle.balanced, simplify_response=True)
+ reply = await chatbot.ask(
+ prompt=user_message,
+ conversation_style=ConversationStyle.balanced,
+ simplify_response=True,
+ )
# Get reply text
text = f"{reply['text']}"
- text = re.sub(r'\[\^(\d+)\^\]', lambda match: '', text)
-
+ text = re.sub(r"\[\^(\d+)\^\]", lambda match: "", text)
+
# Get the URL, if available
try:
- if len(reply['sources']) != 0:
- for i, url in enumerate(reply['sources'], start=1):
- if len(url['providerDisplayName']) == 0:
+ if len(reply["sources"]) != 0:
+ for i, url in enumerate(reply["sources"], start=1):
+ if len(url["providerDisplayName"]) == 0:
all_url.append(f"{i}. {url['seeMoreUrl']}")
else:
- all_url.append(f"{i}. [{url['providerDisplayName']}]({url['seeMoreUrl']})")
+ all_url.append(
+ f"{i}. [{url['providerDisplayName']}]({url['seeMoreUrl']})"
+ )
link_text = "\n".join(all_url)
link_embed = discord.Embed(description=link_text)
except:
pass
-
+
# Set the final message
user_message = user_message.replace("\n", "")
ask = f"> **{user_message}** - <@{str(interaction.user.id)}> (***style: {conversation_style}***)\n\n"
response = f"{ask}{text}"
-
+
# Discord limit about 2000 characters for a message
while len(response) > 2000:
temp = response[:2000]
@@ -91,27 +139,56 @@ async def send_message(chatbot: Chatbot, interaction: discord.Interaction, user_
try:
if len(link_embed) == 0:
all_image = re.findall("https?://[\w\./]+", str(reply["sources_text"]))
- [images_embed.append(discord.Embed(url="https://www.bing.com/").set_image(url=image_link)) for image_link in all_image]
+ [
+ images_embed.append(
+ discord.Embed(url="https://www.bing.com/").set_image(
+ url=image_link
+ )
+ )
+ for image_link in all_image
+ ]
except:
pass
# Add all suggest responses in list
if USE_SUGGEST_RESPONSES:
suggest_responses = reply["suggestions"]
if images_embed:
- await interaction.followup.send(response, view=MyView(interaction, chatbot, conversation_style, suggest_responses), embeds=images_embed, wait=True)
+ await interaction.followup.send(
+ response,
+ view=MyView(
+ interaction, chatbot, conversation_style, suggest_responses
+ ),
+ embeds=images_embed,
+ wait=True,
+ )
elif link_embed:
- await interaction.followup.send(response, view=MyView(interaction, chatbot, conversation_style, suggest_responses), embed=link_embed, wait=True)
+ await interaction.followup.send(
+ response,
+ view=MyView(
+ interaction, chatbot, conversation_style, suggest_responses
+ ),
+ embed=link_embed,
+ wait=True,
+ )
else:
- await interaction.followup.send(response, view=MyView(interaction, chatbot, conversation_style, suggest_responses), wait=True)
+ await interaction.followup.send(
+ response,
+ view=MyView(
+ interaction, chatbot, conversation_style, suggest_responses
+ ),
+ wait=True,
+ )
else:
if images_embed:
- await interaction.followup.send(response, embeds=images_embed, wait=True)
+ await interaction.followup.send(
+ response, embeds=images_embed, wait=True
+ )
elif link_embed:
await interaction.followup.send(response, embed=link_embed, wait=True)
else:
await interaction.followup.send(response, wait=True)
except Exception as e:
- await interaction.followup.send(f">>> **Error: {e}**")
- logger.exception(f"Error while sending message: {e}")
+ await interaction.followup.send(f">>> **Error: {e}**")
+ logger.exception(f"Error while sending message: {e}")
finally:
using_func[interaction.user.id] = False
diff --git a/apps/MythGen/main.py b/apps/MythGen/main.py
index 96d02e3c..1c684286 100644
--- a/apps/MythGen/main.py
+++ b/apps/MythGen/main.py
@@ -6,13 +6,15 @@ import gradio as gr
from BingImageCreator import ImageGen
from swarms.models.bing_chat import BingChat
-# from swarms.models.bingchat import BingChat
+# from swarms.models.bingchat import BingChat
dotenv.load_dotenv(".env")
# Initialize the EdgeGPTModel
cookie = os.environ.get("BING_COOKIE")
auth = os.environ.get("AUTH_COOKIE")
-model = BingChat(cookies_path="./cookies.json", bing_cookie="BING_COOKIE",auth_cookie="AUTH_COOKIE")
+model = BingChat(
+ cookies_path="./cookies.json", bing_cookie="BING_COOKIE", auth_cookie="AUTH_COOKIE"
+)
response = model("Generate")
@@ -23,34 +25,39 @@ latest_caption = ""
standard_suffix = ""
storyboard = []
+
def generate_images_with_bingchat(caption):
img_path = model.create_img(caption)
img_urls = model.images(caption)
return img_urls
+
def generate_single_caption(text):
prompt = f"A comic about {text}."
response = model(text)
return response
+
def interpret_text_with_gpt(text, suffix):
return generate_single_caption(f"{text} {suffix}")
+
def create_standard_suffix(original_prompt):
return f"In the style of {original_prompt}"
+
def gradio_interface(text=None, next_button_clicked=False):
global accumulated_story, latest_caption, standard_suffix, storyboard
-
+
if not standard_suffix:
standard_suffix = create_standard_suffix(text)
-
+
if next_button_clicked:
new_caption = generate_single_caption(latest_caption + " " + standard_suffix)
new_urls = generate_images_with_bingchat(new_caption)
latest_caption = new_caption
storyboard.append((new_urls, new_caption))
-
+
elif text:
caption = generate_single_caption(text + " " + standard_suffix)
comic_panel_urls = generate_images_with_bingchat(caption)
@@ -60,18 +67,25 @@ def gradio_interface(text=None, next_button_clicked=False):
storyboard_html = ""
for urls, cap in storyboard:
for url in urls:
- storyboard_html += f'
{cap}
'
+ storyboard_html += (
+ f'
{cap}
'
+ )
return storyboard_html
+
if __name__ == "__main__":
iface = gr.Interface(
fn=gradio_interface,
inputs=[
- gr.inputs.Textbox(default="Type your story concept here", optional=True, label="Story Concept"),
- gr.inputs.Checkbox(label="Generate Next Part")
+ gr.inputs.Textbox(
+ default="Type your story concept here",
+ optional=True,
+ label="Story Concept",
+ ),
+ gr.inputs.Checkbox(label="Generate Next Part"),
],
outputs=[gr.outputs.HTML()],
- live=False # Submit button will appear
+ live=False, # Submit button will appear
)
iface.launch()
diff --git a/apps/discord.py b/apps/discord.py
index eebc48c8..4d4fcd71 100644
--- a/apps/discord.py
+++ b/apps/discord.py
@@ -5,6 +5,7 @@ import os
from dotenv import load_dotenv
from invoke import Executor
+
class BotCommands(commands.Cog):
def __init__(self, bot):
self.bot = bot
@@ -46,7 +47,7 @@ class BotCommands(commands.Cog):
"""starts listening to voice in the voice channel that the bot is in."""
if ctx.voice_client:
# create a wavesink to record the audio
- sink = discord.sinks.wavesink('audio.wav')
+ sink = discord.sinks.wavesink("audio.wav")
# start recording
ctx.voice_client.start_recording(sink)
await ctx.send("started listening and recording.")
@@ -68,7 +69,11 @@ class BotCommands(commands.Cog):
print("done generating images!")
# list all files in the save_directory
- all_files = [os.path.join(root, file) for root, _, files in os.walk(os.environ("SAVE_DIRECTORY")) for file in files]
+ all_files = [
+ os.path.join(root, file)
+ for root, _, files in os.walk(os.environ("SAVE_DIRECTORY"))
+ for file in files
+ ]
# sort files by their creation time (latest first)
sorted_files = sorted(all_files, key=os.path.getctime, reverse=True)
@@ -82,7 +87,9 @@ class BotCommands(commands.Cog):
# await ctx.send(files=[storage_service.upload(filepath) for filepath in latest_files])
except asyncio.timeouterror:
- await ctx.send("the request took too long! it might have been censored or you're out of boosts. please try entering the prompt again.")
+ await ctx.send(
+ "the request took too long! it might have been censored or you're out of boosts. please try entering the prompt again."
+ )
except Exception as e:
await ctx.send(f"an error occurred: {e}")
@@ -107,10 +114,11 @@ class BotCommands(commands.Cog):
else:
await ctx.send(f"an error occurred: {error}")
+
class Bot:
def __init__(self, llm, command_prefix="!"):
load_dotenv()
-
+
intents = discord.Intents.default()
intents.messages = True
intents.guilds = True
diff --git a/bingchat.py b/bingchat.py
deleted file mode 100644
index f4b91cd7..00000000
--- a/bingchat.py
+++ /dev/null
@@ -1,19 +0,0 @@
-import os
-from swarms.models.bing_chat import BingChat
-from dotenv import load_dotenv
-
-load_dotenv()
-
-# Initialize the EdgeGPTModel
-edgegpt = BingChat(cookies_path="./cookies.json")
-cookie = os.environ.get("BING_COOKIE")
-auth = os.environ.get("AUTH_COOKIE")
-
-# Use the worker to process a task
-# task = "hi"
-img_task = "Sunset over mountains"
-
-# response = edgegpt(task)
-response = edgegpt.create_img(auth_cookie=cookie,auth_cookie_SRCHHPGUSR=auth,prompt=img_task)
-
-print(response)