树形聊天。
otreechat的Python项目详细描述
为Otree提供聊天室,以便参与者能够相互交流。 Live demo here (打开“开始”链接并单击“您的选择”页面)。
这是一个测试版,可能会有更改/改进!
安装
(需要otree core>;=1.2)
pip3 install -U otree-core pip3 install -U otreechat
在settings.py中,将'otreechat'添加到INSTALLED_APPS, 例如INSTALLED_APPS = ['otree', 'otreechat']
然后运行otree resetdb。
要在服务器上安装,您的requirements_base.txt应该 包含otreechat以及otree-core>=1.2.0(或更高版本,等等)。
用法
基本用法
将{% load otreechat %}添加到模板顶部,例如:
{%loadstaticfilesotree_tags%}{%loadotreechat%}
然后,无论您想在模板中的哪个聊天框中使用:
{%chat%}
这将在同一组的玩家之间建立一个聊天室, 每个玩家的昵称显示为 “玩家1”、“玩家2”等(基于玩家的id_in_group)。
自定义昵称和聊天室成员
您可以传递可选参数channel和/或nickname,如下所示:
{%chatnickname="abc"channel="123"%}
昵称
nickname是将在聊天中为该用户显示的昵称。 典型的用法是{% chat nickname=player.role %}。
频道
channel是聊天室的ID,这意味着如果有两个玩家 有相同的channel,他们可以互相聊天。 channel不显示在用户界面中;它只是在内部使用。 它的默认值是group.id,这意味着组中的所有玩家都可以一起聊天。 您可以使用channel将聊天范围改为当前页 或分组等(见下面的例子)。 不管channel参数的值如何, 聊天的范围将至少限于同一会话和同一应用程序中的玩家。
示例:按角色聊天
这里有一个例子,不是在一个小组内交流, 我们根据角色在小组之间进行交流, 所有买家都可以互相交谈, 所有的卖家都可以互相交谈。
classPlayer(BasePlayer):defrole(self):ifself.id_in_group==1:return'Seller'else:return'Buyer'defchat_nickname(self):return'Group {} {}'.format(self.group.id_in_subsession,self.role())
然后在模板中:
{%chatnickname=player.chat_nicknamechannel=player.role%}
示例:跨回合聊天
如果需要玩家与当前处于不同回合的玩家聊天 在游戏中,您可以做到:
{%chatchannel=group.id_in_subsession%}
示例:所有回合中所有组之间的聊天
如果您希望会话中的每个人都能自由交谈,请执行以下操作:
{%chatchannel=1%}
(数字1并不重要;重要的是对每个人来说都是一样的。)
造型
注意
元素的css类在2017年8月更改。 它们被重新命名为更一致的边界元样式。
要自定义样式,只需在{% chat %}元素后面包含一些css, 例如:
{%chat%}<style>.otree-chat__messages{height:400px;}.otree-chat__nickname{color:#0000FF;font-weight:bold;}</style>
您还可以通过将外观放入^{tt22}来自定义外观。$ 以及设置父级<div>的样式。例如,要设置宽度:
<divstyle="width: 400px">{%chat%}</div>
一页多个聊天
每页上可以有多个{% chat %}框, 这样一个播放器可以同时处于多个频道。
例如,此代码允许与组中的每个其他玩家进行1:1的聊天。
classPlayer(BasePlayer):defchat_nickname(self):return'Player {}'.format(self.id_in_group)defchat_configs(self):configs=[]forotherinself.get_others_in_group():ifother.id_in_group<self.id_in_group:lower_id,higher_id=other.id_in_group,self.id_in_groupelse:lower_id,higher_id=self.id_in_group,other.id_in_groupconfigs.append({# make a name for the channel that is the same for all# channel members. That's why we order it (lower, higher)'channel':'{}-{}-{}'.format(self.group.id,lower_id,higher_id),'label':'Chat with {}'.format(other.chat_nickname())})returnconfigs
{%forconfiginplayer.chat_configs%}<h4>{{config.label}}</h4>{%chatnickname=player.chat_nicknamechannel=config.channel%}{%endfor%}
导出聊天日志的csv
聊天日志下载链接将出现在otree的常规数据导出页面上。
升级
pip install -U otreechat
反馈
请将任何反馈/意见发送给chris@otree.org, 例如,建议改进小部件的外观。