lexxyungcarter/chatmessenger

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

1.5.1 2024-03-18 09:06 UTC

README

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

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

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

这笔资金用于维护项目并向 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表移至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() - 根据updated_at日期返回所有最新的线程
  • $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