如何解决在电报机器人中与所选性别和相同语言的稳定匹配
我真正需要什么?
我正在开发电报机器人,它可以让我们在机器人中与陌生人聊天。我有下面这样的数据集。我必须匹配
当用户将 GENDER
发送给机器人时,一个用户到具有首选 LANGUAGE
和相同 /newchat
的用户。
我需要稳定且更快的算法来解决这个问题。
user_id NAME AGE GENDER LANGUAGE COUNTRY userToID state
132 John 34 Male ENGLISH USA none 0
454 Arik 20 Male FRENCH France none 0
456 Mala 24 Female BAHASA Indonesia none 0
342 Sarah 29 Female ENGLISH USA none 0
525 Jerry 15 Male FRENCH France none 0
354 Nancy 23 Female ENGLISH USA none 0
我做了什么?
我正在使用 pytelegrambotapi 和 sqlalchemy
首先,当用户到 /newchat 时,它更新到状态 1 (状态 0 表示离线,状态 1 准备匹配,状态 2 表示正在聊天) 并查询所有用户列表,并从中搜索所需的用户特征
并将其状态更新为 1 并将 userToID
更新为匹配的用户,如果未找到,则仅通过更新其状态,以便将它们设为在线用户。
问题是,经过一段时间后,algrothim 工作太慢且不稳定
@bot.message_handler(commands=['newchat'])
def echo(message):
user_id = str(message.chat.id)
if SESSION.query(exists().where(User.user_id==user_id)).scalar():
if message.text == '/newchat':
s = SESSION
s.query(User).filter(User.user_id==user_id).update({'state':1,'userToID':'ONN'})
s.commit()
u = [r.user_id for r in s.query(User.user_id)]
bot.send_message(user_id,"waiting")
for id in u:
if get_user_gender(user_id)!= get_user_gender(id) and get_user_language(user_id)== get_user_language(id) and get_user_state(id) ==1 and get_user_contact_id(id) == 'ONN':
print(id)
s.query(User).filter(User.user_id==user_id).update({'state':2,'userToID':id})
s.query(User).filter(User.user_id==id).update({'state':2,'userToID':user_id})
bot.send_message(id,matched )
bot.send_message(user_id,matched)
s.commit()
s.close()
break
else:
bot.send_message(SPECIAL_GROUP,"none found")
else:
bot.send_message(user_id,"You are already in matched"
else:
bot.send_message(user_id,not registered)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。