mirror of
https://gitlab.com/octospacc/WinDog.git
synced 2025-06-05 22:09:20 +02:00
Legacy removals, code restructuring, add send_... functions and better help
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
# ================================== #
|
||||
# WinDog multi-purpose chatbot #
|
||||
# Licensed under AGPLv3 by OctoSpacc #
|
||||
# ================================== #
|
||||
# ==================================== #
|
||||
# WinDog multi-purpose chatbot #
|
||||
# Licensed under AGPLv3 by OctoSpacc #
|
||||
# ==================================== #
|
||||
|
||||
""" # windog config start # """
|
||||
|
||||
@ -22,7 +22,7 @@ def getSelenium() -> tuple[int, Driver]|bool:
|
||||
if index not in currentSeleniumDrivers:
|
||||
currentSeleniumDrivers.append(index)
|
||||
break
|
||||
return (index, Driver(uc=True, headless2=True, user_data_dir=f"./Selenium-WinDog/{index}"))
|
||||
return (index, Driver(uc=True, headless2=True, user_data_dir=f"./Data/Selenium/{index}"))
|
||||
|
||||
def closeSelenium(index:int, driver:Driver) -> None:
|
||||
if driver:
|
||||
@ -30,19 +30,19 @@ def closeSelenium(index:int, driver:Driver) -> None:
|
||||
driver.close()
|
||||
driver.quit()
|
||||
except:
|
||||
Log(format_exc())
|
||||
app_log(format_exc())
|
||||
if index:
|
||||
currentSeleniumDrivers.remove(index)
|
||||
|
||||
def cDalleSelenium(context:EventContext, data:InputMessageData) -> None:
|
||||
def cDalleSelenium(context:EventContext, data:InputMessageData):
|
||||
warning_text = "has been blocked by Microsoft because it violates their content policy. Further attempts might lead to a ban on your profile. Please review the Code of Conduct for Image Creator in this picture or at https://www.bing.com/new/termsofuseimagecreator#content-policy."
|
||||
if not (prompt := data.command.body):
|
||||
return SendMessage(context, {"Text": "Please tell me what to generate."})
|
||||
return send_message(context, {"text_plain": "Please tell me what to generate."})
|
||||
driver_index, driver = None, None
|
||||
try:
|
||||
driver = getSelenium()
|
||||
if not driver:
|
||||
return SendMessage(context, {"Text": "Couldn't access a web scraping VM as they are all busy. Please try again later."})
|
||||
return send_message(context, {"text_plain": "Couldn't access a web scraping VM as they are all busy. Please try again later."})
|
||||
driver_index, driver = driver
|
||||
driver.get("https://www.bing.com/images/create/")
|
||||
driver.refresh()
|
||||
@ -50,11 +50,11 @@ def cDalleSelenium(context:EventContext, data:InputMessageData) -> None:
|
||||
driver.find_element('form a[role="button"]').submit()
|
||||
try:
|
||||
driver.find_element('img.gil_err_img[alt="Content warning"]')
|
||||
SendMessage(context, {"Text": f"Content warning: This prompt {warning_text}", "media": {"bytes": open("./Assets/ImageCreator-CodeOfConduct.png", 'rb').read()}})
|
||||
send_message(context, {"text_plain": f"Content warning: This prompt {warning_text}", "media": {"bytes": open("./Assets/ImageCreator-CodeOfConduct.png", 'rb').read()}})
|
||||
return closeSelenium(driver_index, driver)
|
||||
except Exception: # warning element was not found, we should be good
|
||||
pass
|
||||
SendMessage(context, {"Text": "Request sent successfully, please wait..."})
|
||||
send_message(context, {"text_plain": "Request sent successfully, please wait..."})
|
||||
retry_index = 3
|
||||
while retry_index < 12:
|
||||
# note that sometimes generation can still fail and we will never get any image!
|
||||
@ -64,8 +64,9 @@ def cDalleSelenium(context:EventContext, data:InputMessageData) -> None:
|
||||
if not len(img_list):
|
||||
try:
|
||||
driver.find_element('img.gil_err_img[alt="Unsafe image content detected"]')
|
||||
SendMessage(context, {"Text": f"Unsafe image content detected: This result {warning_text}", "media": {"bytes": open("./Assets/ImageCreator-CodeOfConduct.png", 'rb').read()}})
|
||||
return closeSelenium(driver_index, driver)
|
||||
result = send_message(context, {"text_plain": f"Unsafe image content detected: This result {warning_text}", "media": {"bytes": open("./Assets/ImageCreator-CodeOfConduct.png", 'rb').read()}})
|
||||
closeSelenium(driver_index, driver)
|
||||
return result
|
||||
except: # no error is present, so we just have to wait more for the images
|
||||
continue
|
||||
img_array = []
|
||||
@ -73,30 +74,32 @@ def cDalleSelenium(context:EventContext, data:InputMessageData) -> None:
|
||||
img_url = img_url.get_attribute("src").split('?')[0]
|
||||
img_array.append({"url": img_url}) #, "bytes": HttpReq(img_url).read()})
|
||||
page_url = driver.current_url.split('?')[0]
|
||||
SendMessage(context, OutputMessageData(
|
||||
result = send_message(context, OutputMessageData(
|
||||
text_plain=f'"{prompt}"\n{{{page_url}}}',
|
||||
text_html=f'"<i>{html_escape(prompt)}</i>"\n<pre>{page_url}</pre>',
|
||||
media=img_array))
|
||||
return closeSelenium(driver_index, driver)
|
||||
closeSelenium(driver_index, driver)
|
||||
return result
|
||||
raise Exception("VM timed out.")
|
||||
except Exception as error:
|
||||
Log(format_exc())
|
||||
SendMessage(context, {"TextPlain": "An unexpected error occurred."})
|
||||
app_log(format_exc())
|
||||
result = send_message(context, {"text_plain": "An unexpected error occurred."})
|
||||
closeSelenium(driver_index, driver)
|
||||
return result
|
||||
|
||||
def cCraiyonSelenium(context:EventContext, data:InputMessageData) -> None:
|
||||
def cCraiyonSelenium(context:EventContext, data:InputMessageData):
|
||||
if not (prompt := data.command.body):
|
||||
return SendMessage(context, {"Text": "Please tell me what to generate."})
|
||||
return send_message(context, {"text_plain": "Please tell me what to generate."})
|
||||
driver_index, driver = None, None
|
||||
try:
|
||||
driver = getSelenium()
|
||||
if not driver:
|
||||
return SendMessage(context, {"Text": "Couldn't access a web scraping VM as they are all busy. Please try again later."})
|
||||
return send_message(context, {"text_plain": "Couldn't access a web scraping VM as they are all busy. Please try again later."})
|
||||
driver_index, driver = driver
|
||||
driver.get("https://www.craiyon.com/")
|
||||
driver.find_element('textarea#prompt').send_keys(prompt)
|
||||
driver.execute_script("arguments[0].click();", driver.find_element('button#generateButton'))
|
||||
SendMessage(context, {"Text": "Request sent successfully, please wait up to 60 seconds..."})
|
||||
send_message(context, {"text_plain": "Request sent successfully, please wait up to 60 seconds..."})
|
||||
retry_index = 3
|
||||
while retry_index < 16:
|
||||
time.sleep(retry_index := retry_index + 1)
|
||||
@ -106,17 +109,19 @@ def cCraiyonSelenium(context:EventContext, data:InputMessageData) -> None:
|
||||
img_array = []
|
||||
for img_elem in img_list:
|
||||
img_array.append({"url": img_elem.get_attribute("src")}) #, "bytes": HttpReq(img_url).read()})
|
||||
SendMessage(context, {
|
||||
result = send_message(context, {
|
||||
"text_plain": f'"{prompt}"',
|
||||
"text_html": f'"<i>{html_escape(prompt)}</i>"',
|
||||
"media": img_array,
|
||||
})
|
||||
return closeSelenium(driver_index, driver)
|
||||
closeSelenium(driver_index, driver)
|
||||
return result
|
||||
raise Exception("VM timed out.")
|
||||
except Exception as error:
|
||||
Log(format_exc())
|
||||
SendMessage(context, {"TextPlain": "An unexpected error occurred."})
|
||||
app_log(format_exc())
|
||||
result = send_message(context, {"text_plain": "An unexpected error occurred."})
|
||||
closeSelenium(driver_index, driver)
|
||||
return result
|
||||
|
||||
RegisterModule(name="Scrapers", endpoints=[
|
||||
SafeNamespace(names=["dalle"], handler=cDalleSelenium, body=True),
|
||||
|
Reference in New Issue
Block a user