树形聊天。

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, 例如,建议改进小部件的外观。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓中通过TCP发送时java文件损坏   Java测试预期=异常失败,断言错误   java ssh4 LazyInitializationException   java是否可以在集合中添加重复项?   java是一个免费的开源数据库管理工具   java是否可以在导出的html中嵌入图像   编译器构造解释一些东西,并用Java运行生成的字节码?   java KeyPairGenerator未生成随机密钥   java使用正则表达式生成字符串而不是匹配字符串   java中的多线程线程间通信   具有复合密钥的java Hibernate合并问题   java不能在MainActivity类之外使用SharedReferences变量   正在获取切割/零件异常消息。使用java Spring ControllerAdvice   java tomcat漏洞讨论   javascript在Java中实现“system”命令   java如何在JUnit5*中加载*Spring测试上下文之前获取回调?   java bluej关于缺少返回语句   JavaSpringBoot@ModelAttribute包含使用字符串键的其他模型   从可选中抛出异常。ifPresent()Java 8