diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..114ea57 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +data.json \ No newline at end of file diff --git a/commands.py b/commands.py new file mode 100644 index 0000000..e69de29 diff --git a/data-example.json b/data-example.json new file mode 100644 index 0000000..7ea504c --- /dev/null +++ b/data-example.json @@ -0,0 +1,27 @@ +{ + "username":"bot", + "password":"hunter2", + "homeserver":"http://localhost:8008", + "faq":{ + "header":"# Simple example FAQ", + "questions":[ + { + "question":"# What is the meaning of life?", + "answer":"42.", + "key_phrases":["meaning","life"] + }, + { + "question":"# Who is the coolest pokemon?", + "answer":"Mewtwo! 🐈", + "key_phrases":["coolest","pokemon"] + }, + { + "question":"# What is the coolest programming language?", + "answer":"🐍 python!", + "key_phrases":["coolest","programming","language"] + } + ], + "footer":"Brought to you by Nerve\nSee the [code](https://codeberg.org/gabe/Nerve)" + + } +} \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..8d14c7c --- /dev/null +++ b/main.py @@ -0,0 +1,66 @@ +import json +import nio +import simplematrixbotlib as botlib + +data = json.loads(open('data.json').read()) +dfaq = data["faq"] +faq_text = dfaq["header"] + "".join(["\n"+q["question"]+"\n"+q["answer"] + for q in dfaq["questions"]]) + "\n\n"+dfaq["footer"] + +creds = botlib.Creds( + data["homeserver"], + data['username'], + data['password'] + ) +bot = botlib.Bot(creds) +PREFIX = '!' + + +def load_faq(): + dfaq = json.loads(open('data.json').read())["faq"] + return dfaq["header"] + "".join(["\n"+q["question"]+"\n"+q["answer"] for q in dfaq["questions"]]) + "\n\n"+dfaq["footer"] + + +@bot.listener.on_message_event +async def faq(room, message): + match = botlib.MessageMatch(room, message, bot, PREFIX) + if match.is_not_from_this_bot() and match.prefix() and match.command( + "faq"): + await bot.api.send_markdown_message( + room.room_id, + load_faq()) + + +@bot.listener.on_custom_event(nio.InviteMemberEvent) +async def autofaq(room, event): + if event.membership == "join": + await bot.api.send_markdown_message( + room.room_id, + load_faq() + ) + + +def get_questions(): + return json.loads(open('data.json').read())["faq"]["questions"] + + +@bot.listener.on_message_event +async def faqresponse(room, message): + match = botlib.MessageMatch(room, message, bot, PREFIX) + if match.is_not_from_this_bot(): + response = "" + questions = get_questions() + print("Message:",message) + for q in questions: + if sum([ 1 for kp in q["key_phrases"] if kp in message.body]) == len(q["key_phrases"]): + response = response + q["question"] + "\n" + q["answer"]+"\n" + if response != "": + await bot.api.send_markdown_message( + room.room_id, + response + ) + + + + +bot.run() diff --git a/session.txt b/session.txt new file mode 100644 index 0000000..7c1d3b8 --- /dev/null +++ b/session.txt @@ -0,0 +1 @@ +b'gAAAAABiFeXXt9WhUOMhWlxqijC3oTqJQNEDa4ulqGG2V5TRO45uGBye2P2GL7B2Kg8W4UQDkcIG2Ihx6dX4ViTpWnlZx0oF-g==' \ No newline at end of file