云计算/AI - 带1对1聊天室(配有内容审核) (难度:5)
-
简介
在本教程中,你将学习如何在用户各自的计算机上构建一个简单的 1:1 聊天,即两个用户之间的聊天。所有聊天消息都将受到审核(审查),任何不当消息都将被拒绝。所有实现聊天室的 CreatiCode 项目都必须使用与本项目相同的审核机制。
关于云数据
MIT Scratch 提供了“云变量”,允许所有在自己计算机上运行相同项目的用户读取或写入相同的变量。但是,这些变量仅限于数字(不能在其中存储文本),并且最多只能存储 256 位数字。
CreatiCode 游乐场提供了一种更强大的方式来在计算机之间存储和共享数据。它被称为“云数据变量”。您可以存储在这些云数据变量中的内容没有限制,并且可以动态定义新的云数据变量。
演示项目
已完成的项目共享在此链接:
play.creaticode.com/projects/66ef784557566f00396e83ae
请对此进行改编。本教程将帮助您快速了解其工作原理,然后您可以基于此构建新的聊天项目。
如何使用云数据建立新的聊天
在深入细节之前,解释一下我们如何使用云数据变量在两台用户计算机之间进行通信的基本思路会很有帮助。
首先,当主机用户开始新的聊天时,我们会生成一个随机数用作“房间 ID”。当访客用户加入聊天时,他们必须指定完全相同的 ID。这样,每个新的聊天都会有不同的 ID,并且此聊天会话的所有消息都将使用此 ID。
假设房间 ID 为 123。然后主计算机将创建一个新的云数据变量“host-123”,其值将是主机用户的名称。它还将创建另一个云数据变量“guest-123”,该变量将为“pending”。然后,当访客用户加入房间时,他们将“guest-123”变量设置为访客用户的全名。
如何使用云数据建立新的聊天
为了在两台计算机之间传递消息,使用了另外两个云数据变量:“host-msg-123”和“guest-msg-123”。
对于主机用户,每次他们输入新消息时,它将追加到“host-msg-123”云数据变量中,并带有一个递增的 ID 和分隔符“&&”。
例如,如果主机用户说“hi”,则该变量变为“&&1–hi”。如果主机说“good”,则该变量变为“&&1–hi&&2–good”。当访客计算机看到该变量的更新值时,该消息将添加到聊天中。
请注意,云数据变量每 0.5 秒更新一次,因此在其他计算机获取更新值之前会有很小的延迟。
现在,让我们看看程序。
第 1 部分 - 启动屏幕
当点击绿旗时,我们将显示一个带有 2 个按钮和一个文本框的启动屏幕。

顶部按钮供主机用户使用随机 ID 开始新的聊天。对于访客用户,他们需要输入相同的随机 ID,然后单击底部按钮加入该聊天。以下是添加这 3 个小部件的代码:

第 2 部分 - 初始化变量
主机和访客计算机都将使用一些变量。在开始时初始化它们是一个好习惯:

- other msg ID: 来自另一台计算机的最后一条已处理消息的 ID。任何带有新 ID 的消息都需要添加到聊天中。
- my msg ID: 将从此计算机存储的下一条消息的 ID。
- my message: 消息云数据变量的内容,随着此用户输入更多聊天内容,该变量将不断变长。
- messages: 消息列表
第 3 部分 - 处理聊天创建
当单击顶部按钮时,主机会执行以下操作:

主机现在将看到此屏幕:
显示此屏幕后,主计算机继续等待访客加入。
第 4 部分 - 等待访客加入
为了等待访客用户加入,主计算机将其主机名变量的值设置为他们的全名,并将访客名变量设置为“pending”。然后它将进入一个永久循环,直到访客名不再是“pending”。之后,主机将运行“检查消息”块以重复检查来自访客的新消息。

第 5 部分 - 访客用户加入
在访客用户的计算机上,我们读取用户输入的房间 ID,然后检查云变量“guest-房间 ID”是否为“pending”。如果它为空,则该房间不存在;或者如果是另一个人的名字,则表示另一个访客已经加入。因此,只有当访客名变量仍然是“pending”时,我们才能继续。
加入聊天后,我们显示聊天窗口,然后使用此用户的全名更新访客名变量,以便主计算机将检测到有新用户加入。
最后,我们还启动“检查消息”块以重复检查来自主机的新消息。

第 6 部分 - 检查和发送新消息
当主机或访客输入新的聊天消息时,我们使用“获取审核结果”块来检查该消息是否合适。如果结果为“Pass”(而不是“Fail”),我们将使用它;否则,我们将告诉用户该消息已被拒绝。请注意,所有聊天项目都需要执行此步骤。
对于批准的消息,我们使用每次递增的 ID(“my msg ID”)将其追加到“my message”中。然后我们将此消息作为主机或访客添加到本地聊天窗口,并将其存储在云数据变量“host-msg-房间 ID”或“guest-msg-房间 ID”中。

第 7 部分 - 检查来自另一台计算机的消息
当聊天运行时,主机和访客计算机都将持续检查包含来自对方的消息列表的云数据变量。
例如,对于主计算机,如果房间 ID 为 123,则它将每 0.5 秒检查一次“guest-msg-123”的内容。

第 8 部分 - 解析其他用户的消息
由于云数据变量包含来自另一个用户的所有消息的列表,我们需要对其进行解析。我们首先用“&&”分割它,并将各部分存储在“messages”列表中。这样,我们可以逐个查看每条消息。请注意,由于变量以“&&”开头,因此实际消息仅从“messages”列表的索引 2 开始。
对于每条消息,我们可以用“–”分割它,然后第一部分是该消息的 ID。

第 9 部分 - 显示新消息
现在,我们只需要检查每条消息的 ID 是否不小于我们已经处理过的最大 ID(存储在“other msg ID”中)。如果是,我们将此新消息添加到聊天中,并将“other msg ID”加 1。

增强功能
本项目仅显示在线聊天的基本构建块。您可以通过多种方式尝试改进它。以下是一些有趣的想法:
-
支持 2 个以上的用户:您可以尝试将其扩展为允许任意数量的用户加入聊天。
-
AI 参与者:您可以向聊天中添加 ChatGPT AI 助手,该助手将读取所有聊天消息并在被要求执行某些任务时做出响应。
-
在线游戏:您可以使用类似的方式使用云数据变量来创建在线游戏,其中 2 个或更多用户可以一起探索虚拟世界。
-
I CreatiCode pinned this topic on
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login