Merge branch 'dev' into 9_fix_bot_app_py

pull/12/head
VD15 1 day ago
commit 45dd6f10e3
  1. 45
      bot/bot_app.py
  2. 34
      bot/parsing.py
  3. 8
      bot/response.py

@ -4,6 +4,7 @@ import misskey
from parsing import parse_notification
from db_utils import get_or_create_user, add_pull, get_config, set_config
from client import client_connection
from response import generate_response
# Initialize the Misskey client
client = client_connection()
@ -44,15 +45,49 @@ def stream_notifications():
instance = host if host else "local"
if instance in whitelisted_instances or instance == "local":
note = notification.get("note", {}).get("text", "")
note = notification.get("note", {})
note_text = note.get("text", "")
note_id = note.get("id")
notif_type = notification.get("type", "unknown")
# We want the visibility to be related to the type that was received (so if
# people don't want to dump a bunch of notes on home they don't have to)
visibility = notification["note"]["visibility"]
if visibility != "specified":
visibility = "home"
print(f"📨 [{notif_type}] from @{username}@{instance}")
print(f"💬 {note}")
print(f"💬 {note_text}")
print("-" * 30)
# 🧠 Send to the parser
parse_notification(notification,client)
# We get the type of notification to filter the ones that we actually want
# to parse
notif_type = notification.get("type")
if notif_type in ('mention', 'reply'):
# 🧠 Send to the parser
parsed_command = parse_notification(notification,client)
# Get the response
response = generate_response(parsed_command)
if isinstance(response, str):
client.notes_create(
text=response,
reply_id=note_id,
visibility=visibility
)
elif response:
client.notes_create(
text=response[0],
reply_id=note_id,
visibility=visibility,
file_ids=response[1]
#visible_user_ids=[] #todo: write actual visible users ids so pleromers can use the bot privately
)
else:
print(f" Blocked notification from untrusted instance: {host}")
@ -70,7 +105,7 @@ def stream_notifications():
except Exception as e:
print(f"An exception has occured: {e}\n{traceback.format_exc()}")
time.sleep(5)
time.sleep(2)

@ -1,23 +1,11 @@
import random, re
import config
from gacha_response import gacha_response
def parse_notification(notification,client):
'''Oarses any notifications received by the bot and sends any commands to
'''Parses any notifications received by the bot and sends any commands to
gacha_response()'''
# We get the type of notification to filter the ones that we actually want
# to parse
notif_type = notification.get("type")
if not notif_type in ('mention', 'reply'):
return # Ignore anything that isn't a mention
# We want the visibility to be related to the type that was received (so if
# people don't want to dump a bunch of notes on home they don't have to)
visibility = notification["note"]["visibility"]
if visibility != "specified":
visibility = "home"
# Get the full Activitypub ID of the user
user = notification.get("user", {})
@ -50,22 +38,4 @@ def parse_notification(notification,client):
command = parts[0].lower() if parts else None
arguments = parts[1:] if len(parts) > 1 else []
# TODO: move response generation to a different function
response = gacha_response(command.lower(),full_user, arguments, note_obj)
if not response:
return
if isinstance(response, str):
client.notes_create(
text=response,
reply_id=note_id,
visibility=visibility
)
else:
client.notes_create(
text=response[0],
reply_id=note_id,
visibility=visibility,
file_ids=response[1]
#visible_user_ids=[] #todo: write actual visible users ids so pleromers can use the bot privately
)
return [command,full_user, arguments, note_obj]

@ -26,11 +26,13 @@ def is_float(val):
return False
# TODO: See issue #3, separate command parsing from game logic.
def gacha_response(command,full_user, arguments,note_obj):
'''Parses a given command with arguments, processes the game state and
def generate_response(parsed_command):
'''Given a command with arguments, processes the game state and
returns a response'''
command, full_user, arguments, note_obj = parsed_command
if command == "roll":
user_id = get_or_create_user(full_user)
character_id, character_name, file_id, rarity = get_character()
Loading…
Cancel
Save