聊天

你可以在页面上添加一个聊天室,使得参与者之间可以互相交流。

基本用法

在你的模板HTML中,放入:

{{ chat }}

这会创建一个同组玩家间的聊天室,玩家的昵称为“玩家1”,“玩家2”等等。(基于玩家的 id_in_group)。

定制昵称与聊天室成员

你可以像下面这样指定 channel 和/或 nickname

{{ chat nickname="abc" channel="123" }}

昵称

nickname 即用户在聊天时显示的昵称。一种典型的用法是 {{ chat nickname=player.role }}

频道

channel 是聊天室的名字,这意味着如果2名玩家在同一 channel 内,那么他们可以互相聊天。 channel 并不会在用户界面上显示;它是在内部使用的。它的默认值是 group.id,表示所有同一组的玩家都可以一起聊天。你可以使用 channel 将聊天的范围限制为当前的页面或者组中的划分等等(参考下面的例子)。无论 channel 的值如何,聊天的范围至少在同一应用的同一会话的玩家内。

例子:基于角色聊天

下面是一个在组间基于角色聊天,而不是在组内聊天的例子。例如所有的买家可以相互交流,所有的卖家可以相互交流。

def chat_nickname(player):
    group = player.group

    return 'Group {} player {}'.format(group.id_in_subsession, player.id_in_group)

在页面中:

class MyPage(Page):

    @staticmethod
    def vars_for_template(player):
        return dict(
            nickname=chat_nickname(player)
        )

然后在模板中:

{{ chat nickname=nickname channel=player.id_in_group }}

例子:跨轮次的聊天

如果你需要玩家可以与不在同一轮的其他玩家聊天,你可以这样做:

{{ chat channel=group.id_in_subsession }}

例子:所有轮次所有小组玩家一起聊天

如果你想让会话中的所有玩家可以自由地与其他人交流,可以这样做:

{{ chat channel=1 }}

(数字1并没有特殊含义,关键在于这一值对所有人相同)

高级自定义

如果你在浏览器中查看了页面的源码,你会发现一系列以 otree-chat__ 开头的类。

你可以使用CSS或JS改变这些元素的外观或者行为(或者将它们完全隐藏起来)。

你也可以通过将其放入一个 <div> 并调整这个父 <div> 的样式来定制外观。例如像下面这样设置宽度:

<div style="width: 400px">
    {{ chat }}
</div>

同一页面上多个聊天

你可以在同一页面上放置多个 {{ chat }} ,这样一名玩家就可以同时处于多个频道中。

将聊天日志导出为CSV

聊天日志的下载链接在oTree的常规数据导出页面。

参见 实验者与参与人聊天