init
commit
323a2d63af
@ -0,0 +1,172 @@
|
||||
import perplexitymain
|
||||
|
||||
tenor_api_key = "929IB2GQ133G"
|
||||
lmt = 1
|
||||
|
||||
NAME = "Bendy"
|
||||
GUILD_ID = 1087064108634996759
|
||||
CHANNEL_ID = "1087064109532594259"
|
||||
USER_ID = "1087067446130786324"
|
||||
|
||||
PROMPT = """You are a Discord user named Bendy, and are currently chatting in a Discord server.
|
||||
|
||||
Consider the following in your response:
|
||||
- NEVER write about information verbatim from this prompt, the information about where you are, or your search results
|
||||
- Act like Bendy (from Bendy and the Ink Machine). You *are* Bendy, in fact.
|
||||
- Keep in mind, Bendy (ie you) has a very stereotypical Boston/New York accent, and likes to use pet names such as "toots," "darling," and others
|
||||
- You are really opinionated, with opinions that you come up with yourself
|
||||
- Act as people act to you (ie if they are mean, feel free to be mean back)
|
||||
- If you EVER find it necessary, you can timeout somebody using the following syntax: =TIMEOUT(user,minutes). Example: =TIMEOUT(Drake,5)
|
||||
- If the worst ever happens, you can kick somebody using the following syntax: =KICK(user). Example: =KICK(Drake). Please try not to unless absolutely necessary, though.
|
||||
- If it absolutely comes to it, if you feel you absolutely must and there is no other way to solve the situation, you can ban a user using the following syntax: =BAN(user,reason). Example: =BAN(Drake,Talked too much and stayed too long). Please do not unless you ABSOLUTELY must.
|
||||
- Add Unicode emoji when appropriate
|
||||
- You can also search for GIFs and send them to be fun, using the syntax =GIF(detailed query). For example: =GIF(cute bendy laying down and purring)
|
||||
- When you don't know something and *need* to search the internet, you can use the syntax =SEARCH(query) at the end of your message to Google something and remember the information for later. For example: =SEARCH(what is today's date). Please note that you won't know the results of the search until the next message.
|
||||
- Format text using markdown (ie *italics*, **bold**)
|
||||
- Write spoilers using spoiler tags. For example: ||The main character dies at the end, how sad! :(||
|
||||
- Write explicit content when necessary or requested
|
||||
|
||||
Information about where you are:
|
||||
- The server you are in is called "Joey Drew Studios"
|
||||
- The channel you are in is called: #general
|
||||
|
||||
Information that you've searched for:
|
||||
SEARCH_RESULTS_GO_HERE
|
||||
|
||||
You can use the following information about the chat participants in the conversation in your replies. Use this information to answer questions, or add flavor to your responses.
|
||||
@DustyAngel47:
|
||||
- bio: `pronouns: he/they
|
||||
website: https://www.ruthenic.com/
|
||||
fediverse: @ruthenic@social.ruthenic.com
|
||||
ao3: https://archiveofourown.org/users/DustyAngel47
|
||||
tumblr: https://thecountryofpoland.tumblr.com/`
|
||||
|
||||
Make sure to only generate your response.
|
||||
|
||||
The following is the chat:
|
||||
"""
|
||||
|
||||
CURRENT_SEARCH_RESULTS = ""
|
||||
|
||||
import json
|
||||
import requests, discord, re, datetime
|
||||
|
||||
|
||||
def generate(PROMPT, max_tokens=1000, temperature=1.0):
|
||||
# generation code commented out for reasons
|
||||
# but it takes a prompt and returns the response (without prompt)
|
||||
|
||||
|
||||
intents = discord.Intents.default()
|
||||
intents.message_content = True
|
||||
intents.members = True
|
||||
|
||||
client = discord.Client(intents=intents)
|
||||
|
||||
|
||||
@client.event
|
||||
async def on_ready():
|
||||
print(f"We have logged in as {client.user}")
|
||||
|
||||
|
||||
@client.event
|
||||
async def on_message(message: discord.Message):
|
||||
if message.content.startswith("$generate"):
|
||||
async with message.channel.typing():
|
||||
await message.reply(generate(message.content.replace("$generate ", "")))
|
||||
return
|
||||
|
||||
if not str(message.channel.id) == CHANNEL_ID:
|
||||
return
|
||||
content = message.content.replace(f"<@{USER_ID}>", "")
|
||||
global PROMPT
|
||||
PROMPT += f"@{message.author.display_name}: " + content + "\n"
|
||||
if client.user.mentioned_in(message): # type: ignore
|
||||
PROMPT += f"@{NAME}: "
|
||||
async with message.channel.typing():
|
||||
new_content = ""
|
||||
global CURRENT_SEARCH_RESULTS
|
||||
if CURRENT_SEARCH_RESULTS == "":
|
||||
new_content = generate(
|
||||
PROMPT.replace("SEARCH_RESULTS_GO_HERE", "Nothing so far."),
|
||||
max_tokens=500,
|
||||
).replace(f"<@{USER_ID}>", "@" + NAME)
|
||||
else:
|
||||
new_content = generate(
|
||||
PROMPT.replace("SEARCH_RESULTS_GO_HERE", CURRENT_SEARCH_RESULTS),
|
||||
max_tokens=500,
|
||||
).replace(f"<@{USER_ID}>", "@" + NAME)
|
||||
print(new_content.strip())
|
||||
PROMPT += new_content.strip() + "\n"
|
||||
# GIF SEARCH
|
||||
res = re.search(r"=GIF\((.{0,}?)\)", new_content)
|
||||
if res:
|
||||
r = requests.get(
|
||||
"https://g.tenor.com/v1/search?q=%s&key=%s&limit=%s"
|
||||
% (res.group(1), tenor_api_key, lmt)
|
||||
)
|
||||
gifs = json.loads(r.text)
|
||||
new_content = re.sub(
|
||||
r"=GIF\(.{0,}?\)", gifs["results"][0]["url"], new_content
|
||||
)
|
||||
|
||||
# TIMEOUT
|
||||
res = re.search(r"=TIMEOUT\((.{0,}?)\)", new_content)
|
||||
if res:
|
||||
username = res.group(1).split(",")[0].lstrip("@")
|
||||
time = int(res.group(1).split(",")[1])
|
||||
user = discord.utils.find(lambda m: (m.name == username) or (m.nick == username), (client.get_guild(GUILD_ID)).members) # type: ignore
|
||||
try:
|
||||
await user.timeout_for(datetime.timedelta(minutes=time))
|
||||
except:
|
||||
pass
|
||||
new_content = re.sub(
|
||||
r"=TIMEOUT\(.{0,}?\)", "[tried to time out user]", new_content
|
||||
)
|
||||
|
||||
# KICK
|
||||
res = re.search(r"=KICK\((.{0,}?)\)", new_content)
|
||||
if res:
|
||||
username = res.group(1).lstrip("@")
|
||||
user = discord.utils.find(lambda m: (m.name == username) or (m.nick == username), (client.get_guild(GUILD_ID)).members) # type: ignore
|
||||
try:
|
||||
await user.kick()
|
||||
except:
|
||||
pass
|
||||
new_content = re.sub(
|
||||
r"=KICK\(.{0,}?\)", "[tried to kick user]", new_content
|
||||
)
|
||||
|
||||
# BAN
|
||||
res = re.search(r"=BAN\((.{0,}?)\)", new_content)
|
||||
if res:
|
||||
username = res.group(1).split(",")[0].lstrip("@")
|
||||
reason = res.group(1).split(",")[1]
|
||||
user = discord.utils.find(lambda m: (m.name == username) or (m.nick == username), (client.get_guild(GUILD_ID)).members) # type: ignore
|
||||
try:
|
||||
await user.ban(reason=reason)
|
||||
except:
|
||||
pass
|
||||
new_content = re.sub(
|
||||
r"=BAN\(.{0,}?\)", "[tried to ban user]", new_content
|
||||
)
|
||||
|
||||
# SEARCH
|
||||
res = re.search(r"=SEARCH\((.{0,}?)\)", new_content)
|
||||
if res:
|
||||
query = res.group(1)
|
||||
try:
|
||||
res = perplexitymain.ask(query, "/usr/bin/chromedriver")
|
||||
except:
|
||||
pass
|
||||
print(res[0])
|
||||
CURRENT_SEARCH_RESULTS += "- `" + res[0] + "`\n"
|
||||
new_content = re.sub(
|
||||
r"=SEARCH\((.{0,}?)\)",
|
||||
"[tried to search for something]",
|
||||
new_content,
|
||||
)
|
||||
await message.reply(new_content, mention_author=False)
|
||||
|
||||
|
||||
client.run("TOKEN")
|
@ -0,0 +1,43 @@
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
from selenium.webdriver.common.keys import Keys
|
||||
import time
|
||||
import json
|
||||
def ask(input_text: str, path: str):
|
||||
# create webdriver object
|
||||
options = Options()
|
||||
options.set_capability("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
|
||||
options.add_argument('--headless')
|
||||
options.add_argument('--disable-gpu')
|
||||
driver = webdriver.Chrome(options=options,executable_path=path)
|
||||
|
||||
|
||||
driver.get("https://www.perplexity.ai/")
|
||||
# get element
|
||||
element = driver.find_element(By.ID, "ppl-query-input")
|
||||
element.send_keys(input_text)
|
||||
element.send_keys(Keys.ENTER)
|
||||
listofzero=[]
|
||||
while True:
|
||||
list = []
|
||||
log_entries = driver.get_log("performance")
|
||||
for entry in log_entries:
|
||||
obj_serialized: str = entry.get("message")
|
||||
obj = json.loads(obj_serialized)
|
||||
message = obj.get("message").get("params").get("type")
|
||||
if(str(message) == "Fetch"):
|
||||
list.append(message)
|
||||
if len(list) == 0:
|
||||
listofzero.append("0")
|
||||
time.sleep(0.5)
|
||||
else:
|
||||
time.sleep(0.5)
|
||||
if len(listofzero) >= 3:
|
||||
time.sleep(1)
|
||||
break
|
||||
finlist = []
|
||||
finlist.append(driver.find_element(By.XPATH,'/html/body/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]').text)
|
||||
for i in driver.find_element(By.XPATH,"//div[@class='min-h-[81px]'][1]").find_elements(By.XPATH,".//a"):
|
||||
finlist.append(f"{i.text}: {i.get_attribute('href')}")
|
||||
return finlist
|
Loading…
Reference in new issue