mirror of
https://github.com/RPCS3/discord-bot.git
synced 2024-11-27 12:10:22 +00:00
Initial
This commit is contained in:
parent
a4aa126d59
commit
c2d9f86d82
126
bot.py
Normal file
126
bot.py
Normal file
@ -0,0 +1,126 @@
|
||||
import discord
|
||||
import asyncio
|
||||
import urllib.parse
|
||||
import requests
|
||||
import threading
|
||||
import re
|
||||
from bs4 import BeautifulSoup
|
||||
from discord.ext.commands import Bot
|
||||
|
||||
### Made by Roberto Anic Banic
|
||||
### 03-15-2017
|
||||
### Glad to help
|
||||
|
||||
channelid = "291679908067803136"
|
||||
rpcs3Bot = Bot(command_prefix="!")
|
||||
pattern = '[A-z]{4}\\d{5}'
|
||||
|
||||
@rpcs3Bot.event
|
||||
async def on_message(message):
|
||||
if message.author.name == "RPCS3 Bot":
|
||||
return
|
||||
try:
|
||||
if message.content[0] == "!":
|
||||
return await rpcs3Bot.process_commands(message)
|
||||
except IndexError as ie:
|
||||
print(message.content)
|
||||
return
|
||||
#print(message.author.name)
|
||||
codelist = []
|
||||
for matcher in re.finditer(pattern, message.content):
|
||||
code = matcher.group(0)
|
||||
if code not in codelist:
|
||||
codelist.append(code)
|
||||
print(code)
|
||||
for code in codelist:
|
||||
info = await getCode(code)
|
||||
if not info == "None":
|
||||
await rpcs3Bot.send_message(message.channel, info)
|
||||
|
||||
@rpcs3Bot.command()
|
||||
async def credits(*args):
|
||||
"""Author Credit"""
|
||||
return await rpcs3Bot.say("```\nMade by Roberto Anic Banic aka nicba1010!\n```")
|
||||
|
||||
@rpcs3Bot.command(pass_context=True)
|
||||
async def c(ctx, *args):
|
||||
"""Searches the compatibility database, USE: !c searchterm """
|
||||
await compatSearch(ctx, *args)
|
||||
|
||||
@rpcs3Bot.command(pass_context=True)
|
||||
async def compat(ctx, *args):
|
||||
"""Searches the compatibility database, USE: !compat searchterm"""
|
||||
await compatSearch(ctx, *args)
|
||||
|
||||
async def getCode(code):
|
||||
url = "https://rpcs3.net/compatibility?g={}&r=1".format(code)
|
||||
soup = BeautifulSoup(requests.get(url).content, "lxml")
|
||||
compatConContainer = soup.find("table", {"class": "compat-con-container"})
|
||||
trs = compatConContainer.findAll("tr")[1:]
|
||||
if soup.find("p", {"class": "compat-tx1-criteria"}) != None:
|
||||
return "None"
|
||||
if len(trs) == 1:
|
||||
tr = trs[0]
|
||||
tds = tr.findAll("td")
|
||||
gameid = tds[0].findAll("a")[1].text
|
||||
format = "PSN" if tds[1].find("img")["src"].split("/")[-1].split(".")[0] == "psn" else "Retail"
|
||||
title = tds[1].find_all("a")[1].text
|
||||
if len(title) > 40:
|
||||
title = "{}...".format(title[:37])
|
||||
bused = tds[3].find_all("a")[-1].text
|
||||
status = tds[2].find("div").text
|
||||
lupdated = tds[3].find("a").text
|
||||
result = "```\nID:{:9s} Format:{:6s} Title:{:40s} Build:{:8s} Status:{:8s} Updated:{:10s}\n```".format(gameid, format, title, bused, status, lupdated)
|
||||
return result
|
||||
return "None"
|
||||
|
||||
async def compatSearch(ctx, *args):
|
||||
escapedSearch = ""
|
||||
unescapedSearch = ""
|
||||
for arg in args:
|
||||
escapedSearch += "+{}".format(urllib.parse.quote(arg))
|
||||
for arg in args:
|
||||
unescapedSearch += " {}".format(arg)
|
||||
escapedSearch = escapedSearch[1:]
|
||||
unescapedSearch = unescapedSearch[1:]
|
||||
if len(unescapedSearch) < 3:
|
||||
return await rpcs3Bot.send_message(discord.Object(id=channelid), "{} please use 3 or more characters!".format(ctx.message.author.mention))
|
||||
url = "https://rpcs3.net/compatibility?g={}&r=1".format(escapedSearch)
|
||||
soup = BeautifulSoup(requests.get(url).content, "lxml")
|
||||
|
||||
#totalInDb = int(soup.find("div", {"id": "header-tx2-body-b"}).find("p").text.split("currently")[1].split("games")[0].strip())
|
||||
#totalHere = int(soup.find("a", {"title": "Show games from all statuses"}).text.split("(")[1][:-1])
|
||||
|
||||
#if totalHere == totalInDb:
|
||||
# return await rpcs3Bot.send_message(discord.Object(id=channelid), "{} invalid search: {}".format(ctx.message.author.mention, unescapedSearch))
|
||||
if soup.find("p", {"class": "compat-tx1-criteria"}) != None:
|
||||
await rpcs3Bot.send_message(discord.Object(id=channelid), "{} no result found, displaying alternatives for {}!".format(ctx.message.author.mention, unescapedSearch))
|
||||
|
||||
compatConContainer = soup.find("table", {"class": "compat-con-container"})
|
||||
await rpcs3Bot.send_message(discord.Object(id=channelid), "{} searched for: {}".format(ctx.message.author.mention, unescapedSearch))
|
||||
results = "```"
|
||||
trs = compatConContainer.findAll("tr")[1:]
|
||||
if len(trs) == 0:
|
||||
return await rpcs3Bot.send_message(discord.Object(id=channelid), "No results found")
|
||||
for tr in trs:
|
||||
tds = tr.findAll("td")
|
||||
gameid = tds[0].findAll("a")[1].text
|
||||
format = "PSN" if tds[1].find("img")["src"].split("/")[-1].split(".")[0] == "psn" else "Retail"
|
||||
title = tds[1].find_all("a")[1].text
|
||||
if len(title) > 40:
|
||||
title = "{}...".format(title[:37])
|
||||
#print(tds[3])
|
||||
bused = tds[3].find_all("a")[-1].text
|
||||
status = tds[2].find("div").text
|
||||
lupdated = tds[3].find("a").text
|
||||
results += "\nID:{:9s} Format:{:6s} Title:{:40s} Build:{:8s} Status:{:8s} Updated:{:10s}".format(gameid, format, title, bused, status, lupdated)
|
||||
if (len(results) + 124) > 2000 and not (trs.index(tr) == (len(trs) - 1)):
|
||||
await rpcs3Bot.send_message(discord.Object(id=channelid), results + "\n```")
|
||||
results = "```"
|
||||
results += "\n```"
|
||||
await rpcs3Bot.send_message(discord.Object(id=channelid), results)
|
||||
return await rpcs3Bot.send_message(discord.Object(id=channelid), "Retrieved from: {}".format(url))
|
||||
|
||||
rpcs3Bot.run("MjkxNTk4Njk1NjA1MjA3MDQx.C6r8aw.8PfoVoC5Je_RJpU_kLpgTfIVYaM")
|
||||
|
||||
#https://discordapp.com/oauth2/authorize?client_id=291598695605207041&scope=bot&permissions=0
|
Loading…
Reference in New Issue
Block a user