聊天

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

基本用法

在你的模板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并没有特殊含义,关键在于这一值对所有人相同)

高级自定义

如果你在浏览器中查看了页面的源码,你会发现下面的这些选择器是可用的:

元素 CSS/jQuery 选择器
聊天窗体 .otree-chat
输入消息的文本框 .otree-chat__input (注意: __, 而不是 _)
提交消息的按钮 .otree-chat__btn-send
所有消息的div .otree-chat__messages
消息 .otree-chat__msg
消息的昵称 .otree-chat__nickname
消息的文本部分 .otree-chat__body

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

举例来说,要定制样式,将CSS包含在 {% chat %} 元素之后即可,如:

{% chat %}

<style>
    .otree-chat__messages {
        height: 400px;
    }
    .otree-chat__nickname {
        color: #0000FF;
        font-weight: bold;
    }
</style>

注意这里有2个下划线(__, 而不是 _)。

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

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

同一页面上多个聊天

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

将聊天日志导出为CSV

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