PHP Discord获取频道消息功能实现

这篇具有很好参考价值的文章主要介绍了PHP Discord获取频道消息功能实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 关注对应频道

首先要创建自己的频道, 然后到对应的公告频道中关注这个频道(这时 Discord 会让你选择频道, 选择之前创建的频道就可以了)

2. 添加机器人

https://discord.com/developers/applications
Discord 开发者地址, 然后创建一个自己的机器人即可
PHP Discord获取频道消息功能实现,Laravel,PHP,php,laravel

3. 配置机器人权限

进入设置后 选择 OAuth2 然后 选择第一个子选项
如图: 选择 bot , Administrator
PHP Discord获取频道消息功能实现,Laravel,PHP,php,laravel
选择 Bot ,上传头像,填写名称
PHP Discord获取频道消息功能实现,Laravel,PHP,php,laravel
配置机器人
下面 MESSAGE CONTENT INTENT (重点没有选择的话,后面获取内容都是空的)PHP Discord获取频道消息功能实现,Laravel,PHP,php,laravel

4. 使用 DiscordPHP 类库

文档地址 https://packagist.org/packages/team-reflex/discord-php
按照类库 composer require team-reflex/discord-php

5. 代码示例 (Laravel 框架)

先在自己的频道发消息, 然后在日志中查看 $message->content 如果为空 (看第三步配置)

<?php
/**
 * Discord
 */

use App\Models\DiscordMessage;
use Discord\Discord;
use Discord\Exceptions\IntentException;
use Discord\Parts\Channel\Message;

class DiscordUtils
{
    // 配置
    public $config = [
        'token' => 'xxx',
    ];
    // 频道ID
    public $channelId = 'xxx';
    // 官方ID
    public $userId = 'xxx';

    /**
     * @throws IntentException
     */
    public function __construct()
    {
        $this->init();
    }

    /**
     * 初始化
     * @throws IntentException
     */
    public function init()
    {
        $discord = new Discord($this->config);
        $discord->on('ready', function (Discord $discord) {
            logger("Bot is ready!");
            $discord->on('message', function (Message $message, Discord $discord) {
                // 在这里处理收到的消息 
                logger("Received Message :" . $message->content);
                // 这里判断只记录 公告频道的官方发布的消息
                // 指定频道的
                $channel = $message->channel_id === $this->channelId;
                // 指定官方
//                $official = $message->user_id == $this->userId;
                // 消息ID 不为空, 是指定频道, 消息ID是不存在的
                if ($channel) {
                    $data = [
                        'message_id' => $message->id,
                        'channel_id' => $message->channel_id,
                        'user_id' => $message->user_id,
                        'username' => $message->author->username,
                        'content_en' => $message->content,
                        'content' => $message->content,
                        'timestamp' => $message->timestamp->toDateTimeString(),
                    ];
                    logger('write: ', $data);
                    $this->write($data);
                }
            });
        });
        $discord->run();
    }

    /**
     * @param $data
     */
    public function write($data)
    {
        try {
            if (!DiscordMessage::query()->where('message_id', $data['message_id'])->exists()) {
                logger('写入: ', $data);
                DiscordMessage::query()->insertGetId($data);
            } else {
                // 重复写入
                logger('Repeat Write Records');
            }
        } catch (\Exception $e) {
            logger('write error');
        }
    }
}

6. 服务器部署

这里建议使用 进程守护 保持这个命令执行后的进程一直都在
然后在 进程守护 中去管理和重启这个命令(业务逻辑发生修改后需要重启)
注意: 这里不适合使用定时器, 这样会导致服务器或者数据库压力巨大,从而导致宕机文章来源地址https://www.toymoban.com/news/detail-727228.html

<?php

namespace App\Console\Commands;

use App\Library\Api\DiscordUtils;
use Illuminate\Console\Command;

class GetDiscordMessage extends Command
{
    /**
     * php artisan discord:message >> /dev/null 2>&1
     * php artisan discord:message --option -d
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'discord:message';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '获取Discord消息';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     */
    public function handle()
    {
        logger('执行 - 获取Discord消息');
        new DiscordUtils();
    }
}

到了这里,关于PHP Discord获取频道消息功能实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PHP实践:Laravel中事件使用讲解

    🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:PHP面试专区,PHP进阶实战教程。。 🎉欢迎 👍点

    2024年02月22日
    浏览(74)
  • PHP的Laravel的数据库迁移

    在终端输入以下代码 php artisan migrate 我的报错啦!!!!! 数据库里面只有两张表,实际上应该有四张的!!! 反正表已经迁移完成了,就把迁移完成的表的内容注释掉,接着执行php artisan migrate,得到下一个表的内容。 然后依次类推直至所有表都创建完成!!! 当然啦!

    2024年02月04日
    浏览(56)
  • PHP Laravel 路由、中间件、数据库等例子

    以下是使用Laravel框架时的一些常见示例: 1. 路由(Routes): // 定义基本路由 Route::get(\\\'/home\\\', \\\'HomeController@index\\\'); // 带有参数的路由 Route::get(\\\'/user/{id}\\\', \\\'UserController@show\\\'); // 路由组 Route::middleware([\\\'auth\\\'])-group(function () {     Route::get(\\\'/dashboard\\\', \\\'DashboardController@index\\\');     Route::pos

    2024年02月16日
    浏览(56)
  • larvel 中的api.php_Laravel 开发 API

    Laravel10中提示了Target *classController does not exist,为什么呢? 原因是:laravel8开始写法变了。换成了新的写法了 解决方法一: 在路由数组加入 AppHttpControllers 即可。 再次访问URL,搞定。 解决方法二: 打开 appProvidersRouteServiceProvider.php 修改,添加一个namespace变量

    2024年02月06日
    浏览(70)
  • 学习路之PHP--laravel postman 提交表单出现419错误

    问题图片 解决: 白名单 有时候你可能希望设置一组不需要 CSRF 保护的 URL 。例如,如果你正在使用 Stripe 处理付款并使用了他们的 webhook 系统,你会需要从 CSRF 的保护中排除 Stripe webhook 处理程序路由,因为 Stripe 不知道要发送什么样的 CSRF 令牌到你的路由。 通常,你应该把

    2024年01月19日
    浏览(59)
  • 医疗安全不良事件管理系统源码(PHP+ vue+laravel)

    医疗安全不良事件管理系统全套源码 不良事件上报系统源码 不良事件 管理系统 帮助医院梳理建立不良事件上报与管理的一体化解决方案,包含上报内容、归口科室、上报流程及管理办法。提供面向医院的不良事件全过程管理平台,包含事件上报、事件处理、事件追踪、RC

    2024年02月06日
    浏览(58)
  • PHP使用Redis实战实录5:Redis实现消息队列

    PHP使用Redis实战实录系列 PHP使用Redis实战实录1:宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案 PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案 PHP使用Redis实战实录3:数据类型比较、大小限制和性能扩展 PHP使用Redis实战实录4:单例模式和面向过程操作

    2024年02月11日
    浏览(44)
  • 甘特图控件DHTMLX Gantt教程:dhtmlxGantt 与PHP: Laravel(下)

    DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术(PHP,ASP.NET,Java等)简单集成,满足多种定制开发需求

    2024年02月06日
    浏览(75)
  • docker容器下php框架laravel的使用问题与解决方案

    DB_CONNECTION=mysql DB_HOST=localhost DB_CONNECTION=mysql DB_HOST=docker33-mysql-1 容器中只有数据库结构 进入MySQL容器内,创建表结构,添加数据 代码层面需要转换成数组 $query - get ( [\\\'*\\\'] )- toArray () ; 分页数据框架会返回带有data的数据,如果循环记得加上

    2024年01月23日
    浏览(69)
  • DNMP一键部署PHP8.2和Laravel10的Docker环境

    服务器环境 所有命令皆在root用户下运行 VMware虚拟机下的ubuntu22.04 docker24.0.7 docker-compose 2.6.1 yeszao/dnmp开源仓库 仓库地址: https://gitee.com/yeszao/dnmp 本文章只提供整个部署的过程,对docker、dockerFile以及docker-compse的知识最好有初步的认识,才能更好的理解 ① 首先在/www文件夹拉取

    2024年01月20日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包