语法lexx/chatmessenger

Laravel 5, 6, 7, 8, 9 & 10 的简单一对一/群聊消息工具,集成 Pusher

1.5.1 2024-03-18 09:06 UTC

README

此包允许您将完整用户消息系统添加到您的 Laravel 应用程序中。它是一个高度直观的 laravel chatmessenger,并增加了如会话最大参与者数、标记线程和独特的社交媒体分享链接(在其他包中称为 Thread)等附加功能。

Total Downloads Latest Stable Version Latest Unstable Version License composer.lock available

Screenshot 1

为项目捐赠

如果您觉得这个包很有用,并想为维护者买杯咖啡(或者特斯拉,我们不挑剔),请随意。

Patreon donate button

Buy Me a Coffee at ko-fi.com

或者通过在 Marketplace 购买产品和服务。

这笔资金用于维护项目,以及向 Code Style 及其他开源仓库添加新功能。

为项目的 tailwind/vue.js/vuerouter 版本投票

特性

  • 每个用户可以有多个会话
  • 可选地在新消息中循环添加其他用户
  • 查看每个线程的最后一条消息
  • 返回系统中的所有消息、与用户关联的所有消息,或者与用户关联的新/未读消息
  • 轻松返回用户未读消息数
  • 非常灵活的使用方式,您可以实现自己的访问控制
  • 使用 Pusher 广播服务实现实时聊天功能
  • 可以设置每个线程的最大参与者数
  • 可以生成独特的 URL 来共享线程,邀请更多用户加入对话
  • 可以添加/移除对话中的用户 - 就像 WhatsApp 一样!
  • 可以标记/收藏线程

常见用法

  • 公开线程(任何人都可以看到一切)
  • 群组消息(只有参与者可以看到他们的线程)
  • 一对一消息(私人或直接线程)
  • 推送消息以查看,无需刷新页面
  • 线程/对话中可以设置最大参与者数

安装(Laravel 4.x - 已不再支持)

Laravel 4 的安装说明可以在 这里 找到。

安装(Laravel 5.x)

Laravel 5.6 及以上版本

composer require syntaxlexx/chatmessenger

Laravel 5.1 > 5.5

composer require syntaxlexx/chatmessenger@1.0.8

或在 composer.json 中手动添加

"require": {
    "syntaxlexx/chatmessenger": "^1.0"
}

运行

composer update

>>> 如果使用 Laravel 5.4 及以下版本

注意:Laravel Messenger 支持 包发现。如果您使用 Laravel 5.5 及以上版本,请跳过此部分。

将服务提供者添加到 config/app.php 下的 providers

'providers' => [
    Lexx\ChatMessenger\ChatMessengerServiceProvider::class,
],

发布配置

php artisan vendor:publish --provider="Lexx\ChatMessenger\ChatMessengerServiceProvider" --tag="config"

更新配置文件以引用您的用户模型

config/chatmessenger.php

如果您还没有,请创建一个 users 表。如果您需要,默认的 Laravel 迁移将令人满意。

(可选) 如果您不想使用默认的数据库表,请在包配置文件中定义数据库表的名称

'messages_table' => 'lexx_messages',
'participants_table' => 'lexx_participants',
'threads_table' => 'lexx_threads',

发布迁移

php artisan vendor:publish --provider="Lexx\ChatMessenger\ChatMessengerServiceProvider" --tag="migrations"

迁移您的数据库

php artisan migrate

将特质添加到您的用户模型中

use Lexx\ChatMessenger\Traits\Messagable;

class User extends Authenticatable {
    use Messagable;
}

Pusher 集成

本软件包利用pusher/pusher-php-server,该软件包提供开箱即用的推送服务。您只需引入包、注册服务提供商、发布供应商包即可!一切搞定!您就可以开始使用了。

请查看示例部分,获取详细的使用示例。

重大更改

弃用包

由于Pusher Http Laravel已被弃用,当前演示使用最新的Laravel 5/6广播功能。查看演示以了解其实际应用。单独配置频道变得更加易于管理和表达。

如果您计划迁移到Laravel 6,由于依赖问题,Pusher Http Laravel弃用包将禁止您进行迁移。您只需创建一个触发广播消息的事件和一个用于广播的频道。您可以在演示中查看实际用法。

迁移到v1.2

此问题中所述,由于在threads表中没有太多意义,已将星号属性从threads表移动到participants表。(感谢snarcraft)。

运行php artisan vendor:publish --provider="Lexx\ChatMessenger\ChatMessengerServiceProvider" --tag="migrations"以复制迁移文件,然后运行php artisan migrate

给线程添加星标就像在线程上调用star()方法一样简单。如果没有传递userId,则默认为当前登录用户。取消星标线程也是如此。$thread->unstar()

演示在哪里?

为了清楚地了解其工作原理,请打开两个到四个浏览器(私密/隐身模式非常适合此情况)并使用不同的账户登录。

Screenshot

最新演示

我们有一个新演示版本,该版本具有常见的Laravel Jetstream + Inertia堆栈。

Screenshot 1

API列表及使用示例

线程

  • $thread->messages() - 消息关系
  • $thread->getLatestMessageAttribute() - 返回线程中的最新消息
  • $thread->participants() - 参与者关系
  • $thread->creator() - 返回创建线程的用户对象
  • $thread->getAllLatest() - 根据更新时间日期返回所有最新的线程
  • $thread->getBySubject($subject) - 根据主题返回所有线程
  • $thread->participantsUserIds($userId = null) - 返回与线程关联的用户ID数组(不含垃圾信息)
  • $thread->participantsUserIdsWithTrashed($userId = null) - 返回与线程关联的用户ID数组(含垃圾信息)
  • $thread->addParticipant($userId) - 将用户添加到线程中作为参与者(也接受数组|混合类型)
  • $thread->removeParticipant($userId) - 从线程中移除参与者(也接受数组|混合类型)
  • $thread->markAsRead($userId) - 将线程标记为用户已读
  • $thread->isUnread($userId) - 查看当前线程是否被用户标记为未读
  • $thread->activateAllParticipants() - 恢复线程中所有有新消息的参与者
  • $thread->participantsString($userId = null, $columns = []) - 生成参与者信息的字符串(这里的列反映了在用户表中的数据库列,用于返回参与者名称。为了便于管理,您可以定义CHATMESSENGER_PARTICIPANT_AKA并将其设置为特定列。然后您只需忽略向方法传递$columns[]即可)
  • $thread->hasParticipant($userId) - 检查用户是否是线程的当前参与者
  • $thread->userUnreadMessages($userId) - 返回给定用户的线程中的未读消息数组
  • $thread->userUnreadMessagesCount($userId) - 返回给定用户的线程中未读消息的数量
  • $thread->getMaxParticipants() - 返回线程中允许的最大参与人数
  • $thread->hasMaxParticipants() - 检查线程中的最大参与人数是否已达到
  • $thread->star($userId = null) - 星标/收藏线程(如果没有传递$userId,则默认为登录用户)
  • $thread->unstar($userId = null) - 取消星标/取消收藏线程(如果没有传递$userId,则默认为登录用户)
  • $thread->isStarred - 检查线程是否已被星标

消息

  • $message->thread() - 线程关系(获取消息所属的线程)
  • $message->user() - 用户关系(获取消息的发送者)
  • $message->recipients() - 这条消息的接收者

参与者

  • $participant->thread() - 线程关系
  • $participant->user() - 用户关系

User - (Lexx\ChatMessenger\Traits\Messagable)

  • $user->messages() - 消息关系(返回用户消息)
  • $user->threads() - 线程关系(返回用户线程)
  • $user->newThreadsCount() - 返回用户的新消息数量
  • $user->unreadMessagesCount() - 返回用户的新消息数量
  • $user->threadsWithNewMessages() - 返回所有包含新消息的线程

您还可以查看个别模型以获取有关函数的更多信息。此包还利用作用域,以便在需要更多查询控制时。

示例

贡献?

欢迎提出建议,任何形式的贡献都备受重视。如果您有点害羞,请随时发送电子邮件至Lexx YungCarter

安全

如果您发现任何安全相关的问题,请使用问题跟踪器或最好是发送电子邮件至Lexx YungCarter

致谢

接下来是什么?

我们即将推出一个Vue.js版本+ 示例,为那些需要在应用程序中快速设置聊天室/消息的用户提供支持。

所以:

  • Laravel + Vue
  • Vue 独立应用程序(Node)
  • Flutter 独立安卓应用程序

如果您愿意提供代码示例,请随时与我们分享您的代码/存储库。提前感谢!

特别感谢

此包以cmgmyr/laravel-messenger为起点,该起点最初使用了AndreasHeiberg/laravel-messenger作为起点。

星标历史

Star History Chart