{ "info": { "author": "oTree", "author_email": "chris@otree.org", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content" ], "description": "oTree Chat (beta)\n=================\n\nChat rooms for oTree so that participants can communicate with each other.\n`Live demo here `__\n(open the start links and click through to the \"Your Choice\" page).\n\nThis is a beta version and subject to changes/improvements!\n\n\nInstallation\n------------\n\n(Requires otree-core >= 1.2)\n\n.. code-block::\n\n pip3 install -U otree-core\n pip3 install -U otreechat\n\nIn ``settings.py``, add ``'otreechat'`` to ``INSTALLED_APPS``,\ne.g. ``INSTALLED_APPS = ['otree', 'otreechat']``\n\nThen run ``otree resetdb``.\n\nFor installation on your server, your ``requirements_base.txt`` should\ncontain ``otreechat`` as well as ``otree-core>=1.2.0`` (or higher, etc).\n\nUsage\n-----\n\nBasic usage\n~~~~~~~~~~~\n\nAdd ``{% load otreechat %}`` to the top of your template, e.g.:\n\n.. code-block:: html+django\n\n {% load staticfiles otree_tags %}\n {% load otreechat %}\n\nThen wherever you want a chatbox in the template, use:\n\n.. code-block:: html+django\n\n {% chat %}\n\nThis will make a chat room among players in the same Group,\nwhere each player's nickname is displayed as\n\"Player 1\", \"Player 2\", etc. (based on the player's ``id_in_group``).\n\nCustomizing the nickname and chat room members\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can pass optional parameters ``channel`` and/or ``nickname`` like this:\n\n.. code-block:: html+django\n\n {% chat nickname=\"abc\" channel=\"123\" %}\n\nNickname\n''''''''\n\n``nickname`` is the nickname that will be displayed for that user in the chat.\nA typical usage would be ``{% chat nickname=player.role %}``.\n\nChannel\n'''''''\n\n``channel`` is the chat room's ID, meaning that if 2 players\nhave the same ``channel``, they can chat with each other.\n``channel`` is not displayed in the user interface; it's just used internally.\nIts default value is ``group.id``, meaning all players in the group can chat together.\nYou can use ``channel`` to instead scope the chat to the current page\nor sub-division of a group, etc. (see examples below).\nRegardless of the value of the ``channel`` argument,\nthe chat will at least be scoped to players in the same session and the same app.\n\nExample: chat by role\n`````````````````````\n\nHere's an example where instead of communication within a group,\nwe have communication between groups based on role,\ne.g. all buyers can talk with each other,\nand all sellers can talk with each other.\n\n\n.. code-block:: python\n\n class Player(BasePlayer):\n\n def role(self):\n if self.id_in_group == 1:\n return 'Seller'\n else:\n return 'Buyer'\n\n def chat_nickname(self):\n return 'Group {} {}'.format(self.group.id_in_subsession, self.role())\n\nThen in the template:\n\n.. code-block:: html+django\n\n {% chat nickname=player.chat_nickname channel=player.role %}\n\nExample: chat across rounds\n```````````````````````````\n\nIf you need players to chat with players who are currently in a different round\nof the game, you can do:\n\n.. code-block:: html+django\n\n {% chat channel=group.id_in_subsession %}\n\nExample: chat between all groups in all rounds\n``````````````````````````````````````````````\n\nIf you want everyone in the session to freely chat with each other, just do:\n\n.. code-block:: html+django\n\n {% chat channel=1 %}\n\n(The number 1 is not significant; all that matters is that it's the same for everyone.)\n\nStyling\n~~~~~~~\n\n.. note::\n\n The CSS classes for the elements changed in August 2017.\n They were renamed to a more consistent BEM style.\n\nTo customize the style, just include some CSS after the ``{% chat %}`` element,\ne.g.:\n\n.. code-block:: html+django\n\n {% chat %}\n\n \n\nYou can also customize the appearance by putting it inside a ``
``\nand styling that parent ``
``. For example, to set the width:\n\n.. code-block:: html+django\n\n
\n {% chat %}\n
\n\nMultiple chats on a page\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can have multiple ``{% chat %}`` boxes on each page,\nso that a player can be in multiple channels simultaneously.\n\nFor example, this code enables 1:1 chat with every other player in the group.\n\n.. code-block:: python\n\n class Player(BasePlayer):\n\n def chat_nickname(self):\n return 'Player {}'.format(self.id_in_group)\n\n def chat_configs(self):\n configs = []\n for other in self.get_others_in_group():\n if other.id_in_group < self.id_in_group:\n lower_id, higher_id = other.id_in_group, self.id_in_group\n else:\n lower_id, higher_id = self.id_in_group, other.id_in_group\n configs.append({\n # make a name for the channel that is the same for all\n # channel members. That's why we order it (lower, higher)\n 'channel': '{}-{}-{}'.format(self.group.id, lower_id, higher_id),\n 'label': 'Chat with {}'.format(other.chat_nickname())\n })\n return configs\n\n.. code-block:: html+django\n\n {% for config in player.chat_configs %}\n

{{ config.label }}

\n {% chat nickname=player.chat_nickname channel=config.channel %}\n {% endfor %}\n\n\nExporting CSV of chat logs\n--------------------------\n\nThe chat logs download link will appear on oTree's regular data export page.\n\nUpgrading\n---------\n\n.. code-block::\n\n pip install -U otreechat\n\nFeedback\n--------\n\nPlease send any feedback/opinions to chris@otree.org,\nfor example to suggest an improvement to the widget's appearance.\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/oTree-org/otreechat", "keywords": "", "license": "BSD License", "maintainer": "", "maintainer_email": "", "name": "otreechat", "package_url": "https://pypi.org/project/otreechat/", "platform": "", "project_url": "https://pypi.org/project/otreechat/", "project_urls": { "Homepage": "https://github.com/oTree-org/otreechat" }, "release_url": "https://pypi.org/project/otreechat/0.2.1/", "requires_dist": null, "requires_python": "", "summary": "oTree chat.", "version": "0.2.1" }, "last_serial": 3166843, "releases": { "0.1": [], "0.1.1": [ { "comment_text": "", "digests": { "md5": "00e20afc20d8934506531a665f61d076", "sha256": "2c6ada6f774ea8601ee70d90e798b7dd4f02ca483462b5ab4046fb7fdb0be66f" }, "downloads": -1, "filename": "otreechat-0.1.1.tar.gz", "has_sig": false, "md5_digest": "00e20afc20d8934506531a665f61d076", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5369, "upload_time": "2017-02-17T03:23:45", "url": "https://files.pythonhosted.org/packages/49/f7/6e73aaa400ec2827853ffea77ed11bba7d8d93be511dc273874392ffd89e/otreechat-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "aeedb9cdbeb3aa98a2e1f79f4b0a1f1c", "sha256": "4ede7db1b483ee7cf3ec588b6d69962ef908385dd755057a552ee367d05cdba3" }, "downloads": -1, "filename": "otreechat-0.1.2.tar.gz", "has_sig": false, "md5_digest": "aeedb9cdbeb3aa98a2e1f79f4b0a1f1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6553, "upload_time": "2017-02-17T12:13:33", "url": "https://files.pythonhosted.org/packages/f7/ec/ab04348b9a2e123d85453c80eb15fe061557233a1cf6b3f7eb2f1ed94336/otreechat-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "0c3127f80ad7210c1cba59b2f61fdb72", "sha256": "22f20b92c862ec6e531ee03a719ec11c92d11f64b1ff0c8784d4b9ffff505a8e" }, "downloads": -1, "filename": "otreechat-0.1.3.tar.gz", "has_sig": false, "md5_digest": "0c3127f80ad7210c1cba59b2f61fdb72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6621, "upload_time": "2017-02-17T12:24:52", "url": "https://files.pythonhosted.org/packages/e1/1e/2051c34bd8247cc61295c612732842de4c3b24776ea719cc9f6dc83420c1/otreechat-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "5ff7b8fd3873bc3cb1169d4d16a29db2", "sha256": "c39268273cbdd64fae09548d7c6d01a807a0bead331a0a456dd4ec470e05c4d8" }, "downloads": -1, "filename": "otreechat-0.1.4.tar.gz", "has_sig": false, "md5_digest": "5ff7b8fd3873bc3cb1169d4d16a29db2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7949, "upload_time": "2017-02-17T12:25:45", "url": "https://files.pythonhosted.org/packages/0c/92/7a795834786cf8e6a931ec853003d752997ad355b1709071931fbeb2429c/otreechat-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "495f3c158ff385eb01f5a1678623149b", "sha256": "5fc12fa70be02205611788554252859699a13dfc8d5786980c77e4a89d18b7eb" }, "downloads": -1, "filename": "otreechat-0.1.5.tar.gz", "has_sig": false, "md5_digest": "495f3c158ff385eb01f5a1678623149b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8706, "upload_time": "2017-02-17T16:46:12", "url": "https://files.pythonhosted.org/packages/53/ee/8bb7fc2f8958adb4cbc2ed033896fa6ca1e7f3362355aba6898dcfb1217c/otreechat-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "b93eda69b9ae5cb9bb9114025e48e13c", "sha256": "9402f929d07915c057d47d95af1275b0426524117b67a11cdb1b8f09882051b9" }, "downloads": -1, "filename": "otreechat-0.1.6.tar.gz", "has_sig": false, "md5_digest": "b93eda69b9ae5cb9bb9114025e48e13c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9433, "upload_time": "2017-02-19T14:19:43", "url": "https://files.pythonhosted.org/packages/76/8f/66ffa42fceb905aaf287a1ed4875852c9808baf20197a5b7593f25d51a5c/otreechat-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "a949c1232932830ad7ab235e151e9482", "sha256": "0a676a86d1035a3b427e50e0e35ee5b1a6faf59589a22a8d615278016735fc26" }, "downloads": -1, "filename": "otreechat-0.1.7.tar.gz", "has_sig": false, "md5_digest": "a949c1232932830ad7ab235e151e9482", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9350, "upload_time": "2017-02-22T14:00:32", "url": "https://files.pythonhosted.org/packages/08/9c/674dd4b96af8ba654b0abb1878e97b756eb8623906ba836d5be1f5638929/otreechat-0.1.7.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "5ef1c89717f15eade12c99c4310c46c1", "sha256": "b06db25880efe7a2d93c671374aa4a6ea006d55fd769c3fd68729c3f2c07e11d" }, "downloads": -1, "filename": "otreechat-0.2.0.tar.gz", "has_sig": false, "md5_digest": "5ef1c89717f15eade12c99c4310c46c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9804, "upload_time": "2017-08-11T15:58:35", "url": "https://files.pythonhosted.org/packages/14/87/eacd2e4616c8d56324cf2c744f9fcc71c57fc8d78e09b32b86e432693b1a/otreechat-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "b2519aa80d3aec6ca412a263eb9cb37b", "sha256": "f91399ccd5cd45c553be769c05fccda0d28bbf015a0afbd777fee354dc31a83f" }, "downloads": -1, "filename": "otreechat-0.2.1.tar.gz", "has_sig": false, "md5_digest": "b2519aa80d3aec6ca412a263eb9cb37b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9332, "upload_time": "2017-09-12T02:35:36", "url": "https://files.pythonhosted.org/packages/45/50/5cc0527e32b1dea1a67569214d0d349f76548766b801e99c601813f5bd5a/otreechat-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b2519aa80d3aec6ca412a263eb9cb37b", "sha256": "f91399ccd5cd45c553be769c05fccda0d28bbf015a0afbd777fee354dc31a83f" }, "downloads": -1, "filename": "otreechat-0.2.1.tar.gz", "has_sig": false, "md5_digest": "b2519aa80d3aec6ca412a263eb9cb37b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9332, "upload_time": "2017-09-12T02:35:36", "url": "https://files.pythonhosted.org/packages/45/50/5cc0527e32b1dea1a67569214d0d349f76548766b801e99c601813f5bd5a/otreechat-0.2.1.tar.gz" } ] }