90 lines
2.5 KiB
Python
90 lines
2.5 KiB
Python
import json
|
|
import nio
|
|
import simplematrixbotlib as botlib
|
|
import commands
|
|
|
|
data = json.loads(open('data.json').read())
|
|
dfaq = data["faq"]
|
|
userstate = data['users']
|
|
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"]
|
|
|
|
def save_userstate():
|
|
with open('data.json','w') as f:
|
|
f.write(json.dumps(data,indent=4))
|
|
|
|
@bot.listener.on_message_event
|
|
async def faq(room, message):
|
|
if message.sender not in userstate:
|
|
userstate[message.sender] = {"state":[]}
|
|
save_userstate()
|
|
|
|
|
|
state = userstate[message.sender]['state']
|
|
result = commands.handle_command(state,message.body)
|
|
if result['response']!= None:
|
|
state = result['state']
|
|
userstate[message.sender]['state'] = result['state']
|
|
save_userstate()
|
|
await bot.api.send_markdown_message(
|
|
room.room_id,
|
|
result['response']
|
|
)
|
|
|
|
|
|
match = botlib.MessageMatch(room, message, bot, PREFIX)
|
|
#print(f"{message.sender} : {message.body}")
|
|
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 example(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()
|
|
for q in questions:
|
|
if sum([ 1 for kp in q["key_phrases"] if kp in message.body]) == len(q["key_phrases"]):
|
|
response += q["question"] + "\n" + q["answer"]+"\n"
|
|
if response != "":
|
|
await bot.api.send_markdown_message(
|
|
room.room_id,
|
|
response + dfaq["footer"]
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
bot.run()
|