Compare commits
31 Commits
scraper_fu
...
master
Author | SHA1 | Date | |
---|---|---|---|
72c474e97f | |||
d52b4ac5e5 | |||
690239bb86 | |||
b416e04a9a | |||
f2b288fa30 | |||
145114320c | |||
4485d15740 | |||
b4b4d9797d | |||
305fc1405a | |||
ea6ba7464c | |||
328329eb9a | |||
63044c545f | |||
|
5382b876e2 | ||
|
3d80517a6f | ||
|
d08e8199f8 | ||
|
adb4a25d25 | ||
|
dab4e41de0 | ||
|
97d613df58 | ||
|
1e56a84a4c | ||
c011383f0e | |||
544f8052e9 | |||
|
161abdf32e | ||
a256bc277d | |||
d4d14806db | |||
6df3c82a7e | |||
41e38ef80f | |||
0813460e8b | |||
4ca01a868d | |||
1795a87c4b | |||
9704474c29 | |||
5b4ae05582 |
12
frontends.py
Normal file
12
frontends.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
FRONTENDS = {
|
||||||
|
"www.youtube.com/watch": ("iv.datura.network/watch", "inv.tux.pizza/watch"),
|
||||||
|
"youtube.com/watch": ("iv.datura.network/watch", "inv.tux.pizza/watch"),
|
||||||
|
"medium.com" : ("scribe.rip", "sc.vern.cc", "m.opnxng.com"),
|
||||||
|
"stackoverflow.com": ("code.whatever.social", "ao.vern.cc", "overflow.smnz.de"),
|
||||||
|
"instagram.com": ("bibliogram.1d4.us", "bibliogram.froth.zone", "ig.opnxng.com", "proxigram.lunar.icu"),
|
||||||
|
"genius.com": ("dm.vern.cc", "dumb.lunar.icu", "dumb.esmailelbob.xyz"),
|
||||||
|
"reddit.com":("eu.safereddit.com", "l.opnxng.com", "libreddit.bus-hit.me"),
|
||||||
|
"www.imdb.com": ("libremdb.iket.me", "ld.vern.cc", "binge.whatever.social"),
|
||||||
|
"twitter.com": ("n.opnxng.com", "nitter.1d4.us", "nitter.adminforge.de"),
|
||||||
|
"wikipedia.com": ("wiki.adminforge.de", "wiki.froth.zone", "wikiless.esmailelbob.xyz")
|
||||||
|
}
|
30
functions.py
30
functions.py
@ -1,22 +1,40 @@
|
|||||||
import ollama
|
import ollama
|
||||||
import scraper_functions as sf
|
import scraper_functions as sf
|
||||||
|
import random
|
||||||
|
from frontends import FRONTENDS
|
||||||
|
|
||||||
def processmsg(msg, rcpt):
|
def processmsg(msg, rcpt):
|
||||||
if "youtube.com/watch" in msg:
|
if msg.startswith("!"):
|
||||||
return msg.replace("youtube.com", "iv.datura.network")
|
return command(msg, "")
|
||||||
elif msg.startswith("!wiki"):
|
|
||||||
return sf.query_external_website("https://en.wikipedia.org/wiki/", msg.split(" ")[1])
|
|
||||||
elif "good bot" in msg:
|
elif "good bot" in msg:
|
||||||
return "^_^"
|
return "^_^"
|
||||||
|
for big_tech_site in FRONTENDS:
|
||||||
|
if big_tech_site in msg:
|
||||||
|
return "libre link: " + msg.replace(big_tech_site, random.choice(FRONTENDS[big_tech_site]))
|
||||||
|
|
||||||
def command(msg, rcpt):
|
def command(msg, rcpt):
|
||||||
if msg.startswith("!help"):
|
if msg.startswith("!help"):
|
||||||
response = "chatbot commands:" + "\n"
|
response = "chatbot commands:" + "\n"
|
||||||
response += "!help Show this help page" + "\n"
|
response += "!help Show this help page" + "\n"
|
||||||
response += "!ai [message] Ask llama2"
|
response += "!ai [message] Ask llama2" + "\n"
|
||||||
|
response += "!wiki [message] Ask wiki\n"
|
||||||
|
response += "!tasks Show active tasks from the taskmanager\n"
|
||||||
|
response += "!vreme [city] | !prognoza [city] | !weather [city] Show weather for [city]\n"
|
||||||
return response
|
return response
|
||||||
elif msg.startswith("!ai"):
|
elif msg.startswith("!ai"):
|
||||||
client = ollama.Client(host='https://ollama.krov.dmz.rs')
|
client = ollama.Client(host='https://ollama.krov.dmz.rs')
|
||||||
response = client.chat(model='llama2-uncensored:latest', messages=[{'role':'user','content':f'{msg[4:]}'}])
|
response = client.chat(model='llama2-uncensored:latest', messages=[{'role':'user','content':f'{msg[4:]}'}])
|
||||||
return(response['message']['content'])
|
return(response['message']['content'])
|
||||||
|
elif msg.startswith("!wiki"):
|
||||||
|
cmd, query = msg.split(" ", 1)
|
||||||
|
return sf.query_external_website("https://en.wikipedia.org", "/wiki/" + query)
|
||||||
|
elif msg.startswith("!tasks"):
|
||||||
|
content = sf.getDmzTasks("https://todo.dmz.rs/")
|
||||||
|
return content
|
||||||
|
elif msg.startswith("!vreme") or msg.startswith("!prognoza") or msg.startswith("!weather"):
|
||||||
|
commandsplit = msg.split(" ", 1)
|
||||||
|
if len(commandsplit) == 1:
|
||||||
|
return sf.get_weather("Beograd")
|
||||||
|
else:
|
||||||
|
query = commandsplit[1]
|
||||||
|
return sf.get_weather(query)
|
||||||
|
@ -1,12 +1,57 @@
|
|||||||
import requests
|
import requests
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
from urllib.parse import quote
|
||||||
|
|
||||||
|
def getSoup(base_url, query = ""):
|
||||||
|
page = requests.get(base_url + quote(query))
|
||||||
|
soup = BeautifulSoup(page.content, "html.parser")
|
||||||
|
return soup
|
||||||
|
|
||||||
def query_external_website(base_url, query):
|
def query_external_website(base_url, query):
|
||||||
try:
|
try:
|
||||||
page = requests.get(base_url + query)
|
soup = getSoup(base_url, query)
|
||||||
soup = BeautifulSoup(page.content, "html.parser")
|
title = soup.find(id="firstHeading").text
|
||||||
title = soup.find("span", class_="mw-page-title-main").text
|
mainContentElement = soup.find(id="mw-content-text")
|
||||||
content = soup.find(id="mw-content-text").select("p")[2].text
|
if "This page is a redirect" in mainContentElement.text:
|
||||||
return "\nTITLE:\n" + title + "\n\nCONTENT:\n" + content + "\n\nFULL LINK:\n" + base_url + query
|
redirectLink = mainContentElement.find(class_="redirectMsg").find_all("a")[0]["href"]
|
||||||
except:
|
return query_external_website(base_url, redirectLink)
|
||||||
return "Can't parse search result :("
|
content = next((paragraph for paragraph in mainContentElement.select("p") if not paragraph.has_attr("class")), None)
|
||||||
|
if content == None:
|
||||||
|
raise Exception("Can't parse search result :(")
|
||||||
|
return "\nTITLE:\n" + title + "\n\nCONTENT:\n" + content.text + "\n\nFULL LINK:\n" + base_url + quote(query)
|
||||||
|
except Exception as e:
|
||||||
|
return e
|
||||||
|
|
||||||
|
def getDmzTasks(url):
|
||||||
|
try:
|
||||||
|
soup = getSoup(url)
|
||||||
|
tasks = soup.find_all(class_="task")
|
||||||
|
result = "\nActive tasks:\n"
|
||||||
|
for task in tasks:
|
||||||
|
taskIndex = task.select("div")[0].text
|
||||||
|
taskTitle = task.select("div")[1].text
|
||||||
|
result += taskIndex + " " + taskTitle
|
||||||
|
taskSoup = getSoup(url + task.find("a")["href"][1:])
|
||||||
|
description = taskSoup.find("main").select("section")[0].find("p").text
|
||||||
|
result += "\n\tDescription:\n" + "\t\t" + description + "\n"
|
||||||
|
result += "\tAssigned users:\n" + "\t\t"
|
||||||
|
assignedUsers = taskSoup.find_all(class_="user-info-wrap")
|
||||||
|
if len(assignedUsers) == 0:
|
||||||
|
result += "None! Be the first :)\n"
|
||||||
|
result += "\tLink: " + url + task.find("a")["href"][1:] + "\n\n"
|
||||||
|
continue
|
||||||
|
usersList = ""
|
||||||
|
for user in assignedUsers:
|
||||||
|
usersList += user.find("div").text.split(": ")[1] + ", "
|
||||||
|
result += usersList[:-2] + "\n"
|
||||||
|
result += "\tLink: " + url + task.find("a")["href"][1:] + "\n\n"
|
||||||
|
return result
|
||||||
|
except Exception as e:
|
||||||
|
return e
|
||||||
|
|
||||||
|
def get_weather(city:str) -> str:
|
||||||
|
url = f"https://wttr.in/{city}?format=4"
|
||||||
|
if not city.replace(" ","").isalpha():
|
||||||
|
return "no such city"
|
||||||
|
resp = requests.get(url)
|
||||||
|
return resp.content.decode("utf-8").strip()
|
||||||
|
Loading…
Reference in New Issue
Block a user