diff --git a/data/settings.json b/data/settings.json
index 2d94229..9380e44 100644
--- a/data/settings.json
+++ b/data/settings.json
@@ -17,18 +17,16 @@
"ping",
"roll",
"xkcd",
- "poll",
"help"
],
"help_messages": {
- "help": "Admin commands:\n{prefix}shrug: Append shrug to the message\n{prefix}emoji_size {size}: Set default emoji size\n{prefix}emoji_list: Get a list of usable custom emojis\nUser commands:\n{prefix}ping: Ping the selfbot (or as admin, any host)\n{prefix}roll: Roll a dice, provide a number to select dice sides\n{prefix}xkcd: Get an XKCD comic\n{prefix}poll: Create a poll\n{prefix}help: Get information on commands\n\nArguments: (optional) [required] {admin only, optional} {[admin only, required]}\nDo {prefix}help (command) to see command help.",
+ "help": "{prefix}help (command): Get information on commands",
"ping": "{prefix}ping {Host}: Ping the selfbot (or any host)",
"roll": "{prefix}roll (Number): Roll a dice (with number sides)",
- "xkcd": "{prefix}xkcd (Number/Title): Get an XKCD comic",
+ "xkcd": "{prefix}xkcd (Number): Get an XKCD comic",
"shrug": "{prefix}shrug {text}: Append ¯\\_(ツ)_/¯ to the text",
"emoji_size": "{prefix}emoji_size {size}: Set the default emoji size",
- "emoji_list": "{prefix}emoji_list: Get a list of usable custom emojis",
- "poll": "{prefix}poll \"[Question]\" \"[Answer 1]\" \"[Answer 2]\" \"(Answer 3+)\": Create a poll"
+ "emoji_list": "{prefix}emoji_list: Get a list of usable custom emojis"
},
- "source_url": "https://github.com/0xDEADCADE/Matrix-Selfbot"
+ "source_url": "https://g.deadca.de/deadcade/Matrix-Selfbot"
}
diff --git a/main.py b/main.py
index 959facc..3c42702 100644
--- a/main.py
+++ b/main.py
@@ -55,14 +55,6 @@ client = None
ratelimits = {}
# Common function definitions
-# Filter a title for local lookup with XKCD
-def filter_xkcd_title(title):
- filtered_title = ""
- for char in title.lower().split("(")[0]:
- if (char.isdecimal() or char.isalpha()) and (not char == " "):
- filtered_title += char
- return filtered_title
-
# Grab a list of all emojis on disk
def list_emojis():
global settings
@@ -133,6 +125,7 @@ async def edit_message_unformatted(room_id, original_event, text):
# Edits a message (with HTML formatting)
async def edit_message(room_id, original_event, text):
global client
+ text = text.split("")[-1]
unformatted, formatted = text, text
unformatted = "".join([part.split(">")[-1] for part in unformatted.split("<")])
unformatted = html.unescape(unformatted)
@@ -153,10 +146,6 @@ async def send_text(room_id, text):
formatted = formatted.replace("\n", "
")
return await client.room_send(room_id=room_id, message_type="m.room.message", content={"msgtype": "m.text", "body": unformatted + " (SelfBot)", "format": "org.matrix.custom.html", "formatted_body": formatted + (f" (SelfBot)" if settings["source_url"] else " (SelfBot)")}, ignore_unverified_devices=True)
-# Send a reaction
-async def send_reaction(room_id, event_id, emoji):
- return await client.room_send(room_id=room_id, message_type="m.reaction", content={"m.relates_to": {"rel_type": "m.annotation", "event_id": event_id, "key": emoji}}, ignore_unverified_devices=True)
-
# Commands definition
# Appends shrug to the end of the message
async def shrug(args, room, event):
@@ -171,7 +160,14 @@ async def help(args, room, event):
if len(args) == 0:
# No command specified, send command list
source_text = f"\nSource Code" if settings["source_url"] else ""
- return await send_text(room.room_id, settings["help_messages"]["help"].replace("{prefix}", settings["prefix"]) + source_text)
+ helptext = "Admin Commands:\n"
+ for command in settings["admin_command_list"].keys():
+ helptext += settings["help_messages"][command] + "\n"
+ helptext += "\nUser Commands:\n"
+ for command in settings["command_list"].keys():
+ helptext += settings["help_messages"][command] + "\n"
+ helptext += "\n\nArguments: (optional) [required] {admin only, optional}"
+ return await send_text(room.room_id, helptext.replace("{prefix}", settings["prefix"]) + source_text)
else:
help_command = args[0].lower().split(settings["prefix"])[-1]
if help_command in settings["help_messages"].keys():
@@ -225,63 +221,15 @@ async def xkcd(args, room, event):
comic = ""
if len(args) == 1 and args[0].isdecimal():
comic = args[0] + "/"
- elif len(args) > 0:
- lookup = {}
- r = requests.get("https://xkcd.com/archive/")
- for line in r.text.split("\n"):
- if "")[1].split("<")[0])
- lookup[title] = num
- user_title = filter_xkcd_title(" ".join(args))
- if user_title in lookup.keys():
- comic = lookup[user_title] + "/"
- r = requests.get(f"https://xkcd.com/{comic}info.0.json")
- if settings["debug"]:
+ try:
+ r = requests.get(f"https://xkcd.com/{comic}info.0.json")
rj = json.loads(r.text)
- else:
- try:
- rj = json.loads(r.text)
- except Exception:
- return await send_text(room.room_id, "Failed to get XKCD!")
- filename = download_file(rj["img"], settings["cache_path"] + "/" + str(rj["num"]) + "." + rj["img"].split(".")[-1])
- image = await send_file(filename)
- await send_text(room.room_id, f"{rj['year']}/{rj['month']}/{rj['day']}, {str(rj['num'])}: {rj['safe_title']}")
- return await send_image(room.room_id, image, rj['alt'])
-
-# Create a poll
-async def poll(args, room, event):
- parsed_args = []
- base_offset_emoji = 127462
- for arg in args:
- if arg.startswith('"'):
- if arg.endswith('"'):
- parsed_args.append(arg[1:][:-1])
- else:
- parsed_args.append(arg[1:])
- elif arg.endswith('"'):
- parsed_args[-1] += " " + arg[:-1]
- else:
- parsed_args[-1] += " " + arg
- if len(parsed_args) < 3:
- return await send_text(room.room_id, "Please provide at least 2 options")
- question = parsed_args[0]
- options = parsed_args[1:]
- message = f"Poll:\n{question}\n"
- for n, option in enumerate(options):
- message += chr(base_offset_emoji + n) + ": " + option + "\n"
- if option.lower() == "yes":
- message = message.replace(chr(base_offset_emoji + n), chr(9989))
- elif option.lower() == "no":
- message = message.replace(chr(base_offset_emoji + n), chr(10060))
- poll_message = await send_text(room.room_id, message)
- for n, option in enumerate(options):
- reaction_emoji = chr(base_offset_emoji + n)
- if option.lower() == "yes":
- reaction_emoji = chr(9989)
- elif option.lower() == "no":
- reaction_emoji = chr(10060)
- await send_reaction(room.room_id, poll_message.event_id, reaction_emoji)
+ filename = download_file(rj["img"], settings["cache_path"] + "/" + str(rj["num"]) + "." + rj["img"].split(".")[-1])
+ image = await send_file(filename)
+ await send_text(room.room_id, f"{rj['year']}/{rj['month']}/{rj['day']}, {str(rj['num'])}: {rj['safe_title']}")
+ return await send_image(room.room_id, image, rj['alt'])
+ except Exception:
+ return await send_text(room.room_id, "Failed to get XKCD!")
async def message_callback(room: nio.MatrixRoom, event: nio.RoomMessageText) -> None:
global client, settings, emojis
@@ -306,7 +254,10 @@ async def message_callback(room: nio.MatrixRoom, event: nio.RoomMessageText) ->
return
if admin:
# If it is not a command, process regular message parsing.
- new_body, orig_body = event.body, event.body
+ if event.formatted_body:
+ new_body, orig_body = event.formatted_body, event.formatted_body
+ else:
+ new_body, orig_body = event.body, event.body
# Emoji processor
if event.body.count(":") > 1: # Reduce searching by a significant margin
# Get a list of emojis on disk