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

news2024/9/25 17:15:48

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

  • 1. 关注对应频道
  • 2. 添加机器人
  • 3. 配置机器人权限
  • 4. 使用 `DiscordPHP` 类库
  • 5. 代码示例 (Laravel 框架)
  • 6. 服务器部署

1. 关注对应频道

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

2. 添加机器人

https://discord.com/developers/applications
Discord 开发者地址, 然后创建一个自己的机器人即可
在这里插入图片描述

3. 配置机器人权限

进入设置后 选择 OAuth2 然后 选择第一个子选项
如图: 选择 bot , Administrator
在这里插入图片描述
选择 Bot ,上传头像,填写名称
在这里插入图片描述
配置机器人
下面 MESSAGE CONTENT INTENT (重点没有选择的话,后面获取内容都是空的)在这里插入图片描述

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. 服务器部署

命令只执行一次即可, 因为这是一个 Websocket (不要用定时任务, 否则请求过高会要求更换Token)

<?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();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集成内部高端电源开关LTC3637HMSE、LTC3637MPMSE稳压器,TJA1443AT汽车CAN FD收发器。

一、LTC3637 76V、1A 降压型稳压器 &#xff08;简介&#xff09;LTC3637是一款高效率降压DC/DC稳压器&#xff0c;集成内部高端电源开关&#xff0c;功耗仅12μA DC&#xff0c;空载时可保持稳定的输出电压。LTC3637可提供高达1A的负载电流&#xff0c;并具有可编程峰值电流限…

虹科分享 | 想买车无忧?AR为您带来全新体验!

新能源汽车的蓬勃发展&#xff0c;推动着汽车行业加速进行数字化变革。据数据显示&#xff0c;全球新能源汽车销售额持续上升&#xff0c;预计到2025年&#xff0c;新能源汽车市场规模将达到约 4200亿美元&#xff0c;年复合增长率超过 30%。这表明消费者对清洁能源出行的需求不…

3.Javaweb模块进阶

1.2web进阶 什么是 CSRF 攻击&#xff0c;如何避免&#xff1f; CSRF&#xff1a;Cross-Site Request Forgery&#xff08;中文&#xff1a;跨站请求伪造&#xff09;&#xff0c;可以理解为攻击者盗用了你的身份&#xff0c;以你的名义发送恶意请求&#xff0c;比如&#x…

SIP对讲求助终端sip解码广播终端

SIP对讲求助终端sip解码广播终端 SV-2701VP具有10/100M以太网接口&#xff0c;支持最高48KHz采样&#xff0c;192Kbps的音频流播放。接入12V/1A的直流电源。具有1路mic输入&#xff0c;1路线路输入&#xff0c;1路立体音线路输入&#xff0c;这3组信号经过信号混合后输出到本地…

计算机毕业设计选什么题目好?springboot 社区流浪动物救助领养系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Websocket获取B站直播间弹幕教程——第二篇、解包/拆包

教程一、Websocket获取B站直播间弹幕教程 — 哔哩哔哩直播开放平台 1、封包 我们连接上B站Websocket成功后&#xff0c;要做两件事情&#xff1a; 第一、发送鉴权包。第二、发送心跳包&#xff0c;每30秒一次&#xff0c;维持websocket连接。 这两个包不是直接发送过去&…

PowerShell pnpm : 无法加载文件 C:\Users\lenovo\AppData\Roaming\npm\pnpm.ps1

1、右键点击【开始】&#xff0c;打开Windows PowerShell&#xff08;管理员&#xff09; 2、运行命令set-ExecutionPolicy RemoteSigned 3、根据提示&#xff0c;输入A,回车 此时管理员权限已经可以运行pnpm 如果vsCode还报该错误 继续输入 4、右键点击【开始】&#xff0c;打…

如何将gif变成视频?3个转换方法

如何将gif变成视频&#xff1f;没错&#xff0c;GIF是一种动态图片格式&#xff0c;与视频在本质上有所区别。在一些自媒体平台上&#xff0c;我们无法直接分享GIF格式的图片&#xff0c;但可以将其转换为视频格式后再进行分享。因此&#xff0c;当我们想要分享我们喜欢的GIF图…

C# 文件监听FileSystemWatcher

用处 当文件修改后&#xff0c;触发其他操作&#xff0c;例如删除另一个文件夹下的文件等 代码 using System; using System.Collections.Generic; using System.Diagnostics; using System.IO;namespace ConsoleApp6FileSystemWatcher {internal class Program{static void …

【TES720D-KIT】基于复旦微FMQL20S400全国产化ARM开发套件(核心板+底板)

TES720D-KIT是专门针对我司TES720D&#xff08;基于复旦微FMQL20S400的全国产化ARM核心板&#xff09;的一套开发套件&#xff0c;它包含1个TES720D核心板&#xff0c;加上一个TES720D-EXT扩展底板。 FMQL20S400是复旦微电子研制的全可编程融合芯片&#xff0c;在单芯片内集成…

微信小程序在TS模板下引入TDesign组件

介绍 TDesign 是腾讯官方出品的一款微信小程序组件库。本文介绍如何在新建ts空白模板下引入TDesign库 步骤 新建一个空白项目&#xff0c;这里可以选择TS-基础模板 新建项目目录结构如图所示&#xff1a; 注意这里其实小程序的文件都存放在miniprogram文件夹下&#xff0c;…

本文整理了Debian 11在国内的几个软件源。

1&#xff0e;使用说明 一般情况下&#xff0c;将/etc/apt/sources.list文件中Debian默认的软件仓库地址和安全更新仓库地址修改为国内的镜像地址即可&#xff0c;比如将deb.debian.org和security.debian.org改为mirrors.xxx.com&#xff0c;并使用https访问&#xff0c;可使用…

关于神经网络的思考

关于感知机 感知机&#xff08;Perceptron&#xff09;和神经网络&#xff08;Neural Network&#xff09;之间有一定的关系&#xff0c;可以说感知机是神经网络的一个基本组成单元。 感知机&#xff1a; 感知机是一种简单的二分类线性分类器。它接受多个输入&#xff0c;对每…

sanic框架解决多进程共享缓存问题

最近在用sanic框架做项目&#xff0c;今天需要处理多进程共享缓存问题&#xff0c;在网上搜索了很多&#xff0c;知道使用multiprocessing模块&#xff0c;但是导入后&#xff0c;直接使用会报错&#xff0c;然后看官网解决问题。 直接看官方文档点我哦 大致意思如下&#xf…

flutter 常用组件:文本、图片和按钮

文章目录 文本控件富文本控件图片本地图片网络图片按钮文本控件 ##一’码’当先 Text(这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本,textAlign:TextAlign.center,style: TextStyle(fontWeight: FontWeight.bold, font…

简单好用的CHM文件阅读器 CHM Viewer Star最新 for mac

CHM Viewer Star 是一款适用于 Mac 平台的 CHM 文件阅读器软件&#xff0c;支持本地和远程 CHM 文件的打开和查看。它提供了直观易用的界面设计&#xff0c;支持多种浏览模式&#xff0c;如书籍模式、缩略图模式和文本模式等&#xff0c;并提供了丰富的功能和工具&#xff0c;如…

elasticsearch(ES)分布式搜索引擎01——(初识ES,索引库操作和文档操作,RestClient操作索引库和文档)

目录 1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用1.1.2.ELK技术栈1.1.3.elasticsearch和lucene1.1.4.总结 1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排 1.3.es的一些概念1.3.1.文档和字段1.3.2.索引和映射1.3.3.mysql与elasticsearch1.4.3.总结 2.…

mysql面试题41:关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询怎么优化呢?

该文章专注于面试&#xff0c;面试只要回答关键点即可&#xff0c;不需要对框架有非常深入的回答&#xff0c;如果你想应付面试&#xff0c;是足够了&#xff0c;抓住关键点 面试官&#xff1a;关心过业务系统里面的sql耗时吗&#xff1f;统计过慢查询吗&#xff1f;对慢查询怎…

[CSAWQual 2019]Web_Unagi - 文件上传+XXE注入(XML编码绕过)

[CSAWQual 2019]Web_Unagi 1 解题流程1.1 分析1.2 解题 2 思考总结 1 解题流程 这篇博客讲了xml进行编码转换绕过的原理&#xff1a;https://www.shawroot.cc/156.html 1.1 分析 页面可以上传&#xff0c;上传一句话php失败&#xff0c;点击示例发现是xml格式&#xff0c;那…

『Linux小程序』进度条

文章目录 缓冲区问题回车与换行的区别进度条小程序 缓冲区问题 假设有一段代码为: #include<iostream> #include<unistd.h> int main() …