From 61430067301c30ea65eed55351256a81e743b089 Mon Sep 17 00:00:00 2001
From: 0xDEADCADE <69792955+0xDEADCADE@users.noreply.github.com>
Date: Sat, 9 Apr 2022 17:48:12 +0000
Subject: [PATCH] Add poll commnad and reaction wrapper function
---
main.py | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/main.py b/main.py
index 23e6542..959facc 100644
--- a/main.py
+++ b/main.py
@@ -153,6 +153,10 @@ 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):
@@ -245,6 +249,40 @@ async def xkcd(args, room, event):
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)
+
async def message_callback(room: nio.MatrixRoom, event: nio.RoomMessageText) -> None:
global client, settings, emojis
if settings["debug"]: