-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathglobal_defines.php
More file actions
189 lines (170 loc) · 4.83 KB
/
global_defines.php
File metadata and controls
189 lines (170 loc) · 4.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<?php
declare(strict_types=1);
use OneBot\Driver\Event\EventDispatcher;
use OneBot\Driver\Event\EventProvider;
use OneBot\Driver\Interfaces\HandledDispatcherInterface;
use OneBot\Driver\Interfaces\SortedProviderInterface;
use OneBot\Driver\Process\ProcessManager;
use OneBot\V12\Object\MessageSegment;
use OneBot\V12\OneBot;
use Psr\Log\LoggerInterface;
use Symfony\Component\VarDumper\VarDumper;
use ZM\Logger\ConsoleLogger;
const ONEBOT_VERSION = '12';
const ONEBOT_LIBOB_VERSION = '0.6.9';
const ONEBOT_JSON = 1;
const ONEBOT_MSGPACK = 2;
const ONEBOT_TYPE_ANY = 0;
const ONEBOT_TYPE_STRING = 1;
const ONEBOT_TYPE_INT = 2;
const ONEBOT_TYPE_ARRAY = 4;
const ONEBOT_TYPE_FLOAT = 8;
const ONEBOT_TYPE_OBJECT = 16;
const ONEBOT_CORE_ACTION = 1;
const ONEBOT_EXTENDED_ACTION = 2;
const ONEBOT_UNKNOWN_ACTION = 0;
const ONEBOT_PROCESS_MASTER = 1;
const ONEBOT_PROCESS_MANAGER = 2;
const ONEBOT_PROCESS_WORKER = 4;
const ONEBOT_PROCESS_USER = 8;
const ONEBOT_PROCESS_TASKWORKER = 16;
class_alias(MessageSegment::class, 'MessageSegment');
if (DIRECTORY_SEPARATOR === '\\') {
define('ONEBOT_TMP_DIR', 'C:\Windows\Temp');
} elseif (!empty(getenv('TMPDIR'))) {
define('ONEBOT_TMP_DIR', getenv('TMPDIR'));
} elseif (is_writable('/tmp')) {
define('ONEBOT_TMP_DIR', '/tmp');
} else {
define('ONEBOT_TMP_DIR', getcwd() . '/.zm-tmp');
}
/**
* 更漂亮的dump变量
*
* @param mixed $var
* @return array|mixed
*/
function ob_dump($var, ...$moreVars)
{
if (class_exists('\Symfony\Component\VarDumper\VarDumper')) {
VarDumper::dump($var);
foreach ($moreVars as $v) {
VarDumper::dump($v);
}
} elseif (PHP_VERSION >= 8.0) {
var_dump($var, ...$moreVars);
} else {
var_dump($var);
foreach ($moreVars as $v) {
var_dump($v);
}
}
if (1 < func_num_args()) {
return func_get_args();
}
return $var;
}
/**
* 获取 OneBot 日志实例
*/
function ob_logger(): LoggerInterface
{
global $ob_logger;
return $ob_logger;
}
/**
* 检查是否已经初始化了 Logger 对象,如果没有的话,返回 False
*/
function ob_logger_registered(): bool
{
global $ob_logger;
return isset($ob_logger);
}
/**
* 注册一个 Logger 对象到 OneBot 中,如果已经注册了将会覆盖
*/
function ob_logger_register(LoggerInterface $logger): void
{
global $ob_logger;
if ($logger instanceof ConsoleLogger) {
$type = ProcessManager::getProcessType();
$type_map = [
ONEBOT_PROCESS_MASTER => 'MST',
ONEBOT_PROCESS_MANAGER => 'MAN',
ONEBOT_PROCESS_WORKER => '#' . ProcessManager::getProcessId(),
ONEBOT_PROCESS_USER => 'USR',
(ONEBOT_PROCESS_WORKER | ONEBOT_PROCESS_TASKWORKER) => '%' . ProcessManager::getProcessId(),
(ONEBOT_PROCESS_WORKER | ONEBOT_PROCESS_MASTER) => 'MST#' . ProcessManager::getProcessId(),
];
$ss_type = $type_map[$type] ?? ('TYPE*' . $type);
$logger::$format = '[%date%] [%level%] [' . $ss_type . '] %body%';
$logger::$date_format = 'Y-m-d H:i:s';
}
$ob_logger = $logger;
}
/**
* 获取 OneBot 配置实例
*
* @param null|mixed $default
* @return mixed
*/
function ob_config(?string $key = null, $default = null)
{
$config = OneBot::getInstance()->getConfig();
if (!is_null($key)) {
$config = $config->get($key, $default);
}
return $config;
}
/**
* 生成 UUID
*
* @param bool $uppercase 是否大写
*/
function ob_uuidgen(bool $uppercase = false): string
{
try {
$data = random_bytes(16);
} catch (Exception $e) {
throw new RuntimeException('Failed to generate UUID: ' . $e->getMessage(), $e->getCode(), $e);
}
$data[6] = chr(ord($data[6]) & 0x0F | 0x40);
$data[8] = chr(ord($data[8]) & 0x3F | 0x80);
return $uppercase ? strtoupper(vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)))
: vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
function ob_event_dispatcher(): HandledDispatcherInterface
{
global $ob_event_dispatcher;
if ($ob_event_dispatcher === null) {
$ob_event_dispatcher = new EventDispatcher();
}
return $ob_event_dispatcher;
}
function ob_event_provider(): SortedProviderInterface
{
global $ob_event_provider;
if ($ob_event_provider === null) {
$ob_event_provider = EventProvider::getInstance();
}
return $ob_event_provider;
}
/**
* 判断当前驱动是否为指定驱动
*
* @param string $driver 驱动名称
*/
function ob_driver_is(string $driver): bool
{
return get_class(OneBot::getInstance()->getDriver()) === $driver;
}
/**
* 构建消息段的助手函数
*
* @param string $type 类型
* @param array $data 字段
*/
function ob_segment(string $type, array $data = []): MessageSegment
{
return new MessageSegment($type, $data);
}