Как следует написать функцию вызова работы скрипта Python + pycharm

Час добрый, знаю что вопрос фундаментальный и от части глупый, но раз его задаю, то значит что не могу найти решение. Суть в том, что не выходит понять каким образом запустить скрипт (будет прикреплен в конце) без появления ошибок при написании запуска Знаю что данные функции вызывают запуск всех функций (написал только про speak) И пожалуйста дайте ответ если его знаете, а не закидывайте минусами без объяснения. И сам прекрасно понимаю что данный вопрос является по сути глупым

def main():
    speak()

if __name__ == "__main__":
    main()

Но при вводе такой конструкции мне выдает данную ошибку: TypeError: speak() missing 1 required positional argument: 'what'

И примерно такая же картина обстоит и с остальным. Подскажите пожалуйста как правильно написать вызов работы всех функций. Полный код без if name == "main":



import os
import time
from fuzzywuzzy import fuzz
import speech_recognition as sr
import pyttsx3
import datetime

opts = {
    "alias": ('кира', 'окей кира', 'кирара', 'привет кира', 'привет кирара',
                'окей кирара'),
    "tbr": ('сколько', 'скажи', 'найди', 'произнеси'),
    "cmds": {
        "ctime": ('сколько время', 'текущее время', 'который час', 'какой час'),
        "music": ('включи музыку', 'включи яндекс музыку', 'открой яндекс музыку', 'открой музыку'),
        "open_yutb": ('включи ютуб', 'открой ютуб')
    }
}

print("1")


def speak(what):
    print(what)
    speak_engine.say(what)
    speak_engine.runAndWait()
    speak_engine.stop()


def callback(recognizer, audio):
    try:
        voice = recognizer.recognize_google(audio, language="ru-RU").lower()
        print("[log] Распознано: " + voice)

        if voice.startswith(opts["alias"]):
            cmd = voice

            for x in opts['alias']:
                cmd = cmd.replace(x, "").strip()

            for x in opts['tbr']:
                cmd = cmd.replace(x, "").strip()


            # Распознаем и выполняем команду
            cmd = recognize_cmd(cmd)
            execute_cmd(cmd['cmd'])

    except sr.UnknownValueError:
        print("[log] Голос не распознан!")

    except sr.RequestError as e:
        print("[log] Неизвестная ошибка, возможно отсутствует интернет!")


def recognize_cmd(cmd):
    print("3")
    RC = {'cmd': '', "percent": 0}
    for c,v in opts['cmds'].items():

        for x in v:
            vrt = fuzz.ratio(cmd, x)
            if vrt > RC['percent']:
                RC['cmd'] = c
                RC['percent'] = vrt

    return RC


def execute_cmd(cmd):
    print('4')
    if cmd == 'ctime':
        now = datetime.datetime.now()
        speak("Сейчас" + str(now.hour) + ":" + str(now.minute))

    elif cmd == 'music':
        speak('Я пока что не могу включить музыку')

    else:
        print('Команда не распознана')
        speak('Команда не распознана')


# Запуск
r = sr.Recognizer()
m = sr.Microphone(device_index=1)

with m as source:
    r.adjust_for_ambient_noise(source)

speak_engine = pyttsx3.init()


Ответы (0 шт):