Hallo!
In diesem Artikel werde ich meinen Telegramm-Bot beschreiben, der noch funktioniert.
Warum der Bot erstellt wurde, sein Zweck und seine Fähigkeiten
In Wirklichkeit verwendet eine Person eine Vielzahl von Geräuschen, um ihre Emotionen und Beziehungen auszudrücken. Aber fast alle künstlichen Intelligenzsysteme und Sprachassistenten sind "zu intelligent". Sie verwerfen einfach emotionale Geräusche, verstehen sie nicht und können Interjektionen nicht richtig verwenden. Deshalb habe ich einen Bot erstellt, der die Möglichkeit einer natürlichen Sprache eröffnet, die voller Summen, Quietschen, Schluchzen, Knurren und hundert anderer emotionaler Töne und Halbtöne ist.
Ich nehme an, dass der entwickelte Algorithmus im kommerziellen Bereich funktioniert, indem er beispielsweise den emotionalen Zustand des Kunden verfolgt und die Verzweigung des Algorithmus steuert, um mögliche Aktionen zu verhindern. Emotionen sind die ersten Regulatoren des Verhaltens, und durch den Tonfall oder zum Beispiel durch ein Kichern ist es leicht, die Verwirrung und Irritation des Benutzers zu verfolgen und zu reagieren, bevor er anfängt zu fluchen und zu fordern.
Sie können den Sprachassistenten auch selbst mehr "Menschlichkeit" geben. Sie können sich vor einem langen Vortrag oder Grinsen die Kehle räuspern, anstatt mit normaler Stimme zu erklären, dass dies ein Witz war.
In der medizinischen Praxis hilft das Programm dabei, den Zustand eines Patienten zu bestimmen, der nicht gut sprechen kann, und fĂĽhrt das Personal durch individuelles Schluchzen zum Behandlungsverfahren. Es kann auf bestimmte Kategorien von Krankheiten wie Autismus und Legasthenie angewendet werden.
In Instant Messenger hilft der Bot, Gefühle und Beziehungen durch das Netzwerk gleichberechtigt zu vermitteln, zusätzlich zu oder anstelle von Standard-Emoji.
Als Plattform fĂĽr Experimente und Entwicklung benutze ich den Telegramm-Messenger.
Derzeit gibt @YouToneBot den Emotionssound an den Standard-Smiley zurĂĽck.
In Zukunft ist geplant, dem Bot beizubringen, die umgekehrte Operation auszufĂĽhren, dh dem Soundton "Emoji" zu geben.
Wie wird es am Ende sein?
, , ! , , .
, , . , , .
Python, PyTelegramBotApi.
, . , , , .. PyTelegramBotApi send_voice() id , message_handler() message.voice.file_id.
, : JSON , , id .
, , id, . , "python ", , id .
:
{
"emoji1": "voice_id1",
"emoji2": "voice_id2",
"emoji3": "voice_id3",
"emoji4": "voice_id4",
"emoji5": "voice_id5",
"emoji6": "voice_id6",
}
#- , "emoji" == ~
.
.
YouTone(), .
def init(self) TOKEN, VOICE_SOUNDS
TOKEN —
VOICE_SOUNDS — , id #
, init, self.BOT,
TL.TeleBot(self.TOKEN)
, .
, 3 ,
LS_handler() —
start_handler() — (/start /get)
local_lerning() —
LS_handler() echo
def LS_handler(self):
@self.BOT.message_handler(content_types=['text'])
def send_text(message):
def msg(message_text):
self.BOT.send_message(message.chat.id, str(message_text))
msg(message.text)start_handler() /start
def start_handler(self):
@self.BOT.message_handler(commands=['start', "get"])
def commands(message):
if message.text == "/start":
self.BOT.send_message(message.chat.id, '. ') local_lerning(). , , , .
, tkinter. tkitner , , tkitner " ", " ", ( ):
—
id —
3 ,
window_smile() — tkitner
bot_work() — , .
save_sound() — id
—
, window_smile()
def window_smile():# local_lerning()
self.root = Tk()
self.root.geometry("500x500")
self.smile_tkinter = Label(text=self.AUDIO_SOUNDS_ITEMS[self.index][0],font='Times 30')
self.open_sound = Button(text=" ",font='Times 10',command=lambda: webbrowser.open(url=r"/////.ogg"))
self.Y_or_N = Button(text=" ",font='Times 15',command=save_sound)
self.info = Label(text="""\n\n\n\n\n\n\n , ,\n ,\n ' ',\n ,\n ,\n ,\n .""",font="Consolas 11")
self.smile_tkinter.pack()
self.open_sound.pack()
self.Y_or_N.pack()
self.info.pack()
self.root.mainloop() bot_work() , , "/////.ogg",
def bot_work():
@self.BOT.message_handler(content_types=['text',"voice"])
def send_text(message):
def msg(message_text):
self.BOT.send_message(message.chat.id, str(message_text))
self.smile_now = self.SOUNDS_DB[self.index][0]
self.smile_tkinter.config(text=self.smile_now)
try:
self.id_voice = message.voice.file_id
self.voice_info = self.BOT.get_file(file_id=self.id_voice)
self.voice_file = requests.get('https://api.telegram.org/file/bot{0}/{1}'.format(self.TOKEN, self.voice_info.file_path)).content
except BaseException as e:
print(e)
else:
with open("/////.ogg", "wb") as f:
f.write(self.voice_file)
get_file(), id ( ), id requests, .
id , self.voice_id.
def save_sound():
self.voices_good.update({self.smile_now:str(self.id_voice)})
self.index += 1
self.smile_now = self.SMILES_DB[self.index][0]
self.smile_tkinter.config(text=self.smile_now)
with open("data.txt","w",encoding="utf-8") as f:
f.write(str(self.voices_good))
" ".
.
, self.index, , .. self.SMILES_DB
local_lerning(), 2 ,
window_smile() bot_work().
threading.
from threading import Thread
th1 = Thread(target=window_smile)
th1.start()
th2 = Thread(target=bot_work)
th2.start()
def local_lerning(self):
from threading import Thread
self.smile_now = None
self.index = 0
self.id_voice = None
self.voices_good = {
}
self.smile_tkinter = None
def save_sound():
self.voices_good.update({self.smile_now:str(self.id_voice)})
self.index += 1
self.smile_now = self.AUDIO_SOUNDS_ITEMS[self.index][0]
self.smile_tkinter.config(text=self.smile_now)
with open("data.txt","w",encoding="utf-8") as f:
f.write(str(self.voices_good))
def window_smile():
self.root = Tk()
self.root.geometry("500x500")
self.smile_tkinter = Label(text=self.AUDIO_SOUNDS_ITEMS[self.index][0],font='Times 30')
self.open_sound = Button(text=" ",font='Times 10',command=lambda: webbrowser.open(url=r"C:\Program Files\JetBrains\projects\telegram\voice.ogg"))
self.Y_or_N = Button(text=" ",font='Times 15',command=save_sound)
self.info = Label(text="""\n\n\n\n\n\n\n , ,\n ,\n ' ',\n ,\n ,\n ,\n .""",font="Consolas 11")
self.smile_tkinter.pack()
self.open_sound.pack()
self.Y_or_N.pack()
self.info.pack()
self.root.mainloop()
def bot_work():
@self.BOT.message_handler(content_types=['text',"voice"])
def send_text(message):
def msg(message_text):
self.BOT.send_message(message.chat.id, str(message_text))
def snd_doc(name_doc):
self.BOT.send_document(message.chat.id, open(name_doc, "rb"))
self.smile_now = self.AUDIO_SOUNDS_ITEMS[self.index][0]
self.smile_tkinter.config(text=self.smile_now)
try:
self.id_voice = message.voice.file_id
self.voice_info = self.BOT.get_file(file_id=self.id_voice)
self.voice_file = requests.get('https://api.telegram.org/file/bot{0}/{1}'.format(self.TOKEN, self.voice_info.file_path)).content
except BaseException as e:
print(": ",e)
else:
with open("voice.ogg", "wb") as f:
f.write(self.voice_file)
th1 = Thread(target=window_smile)
th1.start()
th2 = Thread(target=bot_work)
th2.start() .

, . .
, .
. , inline.
, , , , , .
message_list = list(message.text)
is_send = False
for word in message_list:
if word in self.VOICE_SOUNDS:
if self.VOICE_SOUNDS[word]:
snd_voice(voice_id=self.VOICE_SOUNDS[word])
print("smile has been found")
is_send = True
break
if not is_send:
print("smile has been not found")
def LS_handler(self):
@self.BOT.message_handler(content_types=['text'])
def send_text(message):
def msg(message_text):
self.BOT.send_message(message.chat.id, str(message_text))
def snd_doc(name_doc):
self.BOT.send_document(message.chat.id, open(name_doc, "rb"))
def snd_voice(voice_id: str):
self.BOT.send_voice(message.chat.id,voice=voice_id)
message_list = list(message.text)
is_send = False
for word in message_list:
if word in self.VOICE_SOUNDS:
if self.VOICE_SOUNDS[word]:
snd_voice(voice_id=self.VOICE_SOUNDS[word])
is_send = True
break
if not is_send:
msg(" LS_handler(), , inline_handler()
inline , , , -
def inline_handler(self):
@self.BOT.inline_handler(lambda query: len(query.query) > 0)
def query_text(query):
message_list = list(query.query)
# , , ;)
output_msg = [types.InlineQueryResultArticle(
id="1",
title=" ",
input_message_content=types.InputTextMessageContent(message_text=" ")
)]
is_send = False
id_now = 1#id
for word in message_list:
try:
self.VOICE_SOUNDS[word]
except KeyError:
pass
else:
if self.VOICE_SOUNDS[word]:
if is_send == False:
output_msg = []
is_send = True
if not word in [i.title for i in output_msg]:# , ;)
output_msg.append(types.InlineQueryResultCachedVoice(
id=str(id_now),
voice_file_id=self.VOICE_SOUNDS[word],
title=str(word),
caption=query.query
))
else:
pass#
id_now +=1 # id
self.BOT.answer_inline_query(query.id, output_msg) , , — .
.. , , ( break), , . .
inline