DELETE FROM A WHERE A.id NOT IN (SELECT id FROM B);
.createMessageComponentCollector()
был добавлен в 13.0.0 версии, поэтому для использования нужно обновиться.npm uninstall discord.js
npm install discord.js
node -v
в терминал. await message.channel.send(embed, { component: row });
- message.channel.send(embed, { component: row });
+ message.channel.send({ embeds: [embed], components: [row] });
$image = imagecreatefromstring(file_get_contents('test.jpg'));
// получаем разеры исходника
$ix = imagesx($image);
$iy = imagesy($image);
// делаем холст с заливкой фона
$newimage = imagecreatetruecolor($ix, $iy);
$transparent = imagecolorallocatealpha($newimage, 255, 255, 255, 127);
imagefill($newimage, 0, 0, $transparent);
imagealphablending($newimage, true);
imagesavealpha($newimage, true);
// накладываем исходник на холст
imagecopyresampled($newimage, $image, 0, 0, 0, 0, $ix, $iy, $ix, $iy);
// берем вотермарку
$imageW = imagecreatefromstring(file_get_contents('logo.png'));
$wx = imagesx($imageW);
$wy = imagesy($imageW);
// для поворота нужен прозрачный холст
$new = imagecreatetruecolor($wx, $wy);
$transparent = imagecolorallocatealpha($new, 0, 0, 0, 127);
$rotate = imagerotate($imageW, 45, $transparent);
imagealphablending($rotate, true);
imagesavealpha($rotate, true);
// пересчет размеров после поворота
$ix = imagesx($rotate);
$iy = imagesy($rotate);
// наложение 50 50 начало от левого верхнего угла
imagecopyresampled($image, $rotate, 50, 50, 0, 0, $ix, $iy, $ix, $iy);
// сохранение
imagepng($image, 'testus.png', 9, PNG_ALL_FILTERS);
$config = array(
'host' => 'localhost',
'name' => 'test',
'user' => 'root',
'pass' => '',
);
$pdo = new \PDO('mysql:host=' . $config['host'] . ';dbname=' . $config['name'], $config['user'], $config['pass'],
[
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'",
\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,
]
);
$res = $pdo->query('select * from `products` order by `parent_id` asc');
$cats = [];
$structure = [];
while ($row = $res->fetch()) {
$cats[$row['id']] = $row;
$structure[$row['parent_id']][] = $row['id'];
}
class Printer
{
private $cats = [];
private $structure = [];
public function __construct(array $cats, array $structure)
{
$this->setCats($cats);
$this->setStructure($structure);
}
private function setCats(array $cats): void
{
$this->cats = $cats;
}
private function setStructure(array $structure): void
{
$this->structure = $structure;
}
protected function element(int $element): string
{
return '<a href="' . $this->cats[$element]['id'] . '">' . $this->cats[$element]['name'] . '</a>';
}
private function printElement(int $element, int $dept): string
{
$str = $this->element($element) . PHP_EOL;
if (is_array($this->structure[$element]) && count($this->structure[$element]) > 0) {
foreach ($this->structure[$element] as $id) {
$str .= $this->print($id, $dept + 1);
}
}
return $str;
}
private function print(int $element, int $dept = 1): string
{
return '<ul><li>' . $this->printElement($element, $dept) . '</li></ul>' . PHP_EOL;
}
private function run(): string
{
return $this->print(current(current($this->structure)));
}
public function __toString(): string
{
return $this->run();
}
}
echo(new Printer($cats, $structure));
-- phpMyAdmin SQL Dump
-- version 4.8.3
-- https://www.phpmyadmin.net/
--
-- Хост: 127.0.0.1:3306
-- Время создания: Фев 16 2019 г., 11:41
-- Версия сервера: 8.0.12
-- Версия PHP: 7.2.10
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- База данных: `test`
--
-- --------------------------------------------------------
--
-- Структура таблицы `products`
--
CREATE TABLE `products` (
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8mb4_general_ci NOT NULL,
`parent_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
--
-- Дамп данных таблицы `products`
--
INSERT INTO `products` (`id`, `name`, `parent_id`) VALUES
(1, 'Рыбалка', 0),
(2, 'Удилища', 1),
(4, 'Спининговые', 2),
(5, 'Морские', 2),
(6, 'Катушки', 1);
--
-- Индексы сохранённых таблиц
--
--
-- Индексы таблицы `products`
--
ALTER TABLE `products`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT для сохранённых таблиц
--
--
-- AUTO_INCREMENT для таблицы `products`
--
ALTER TABLE `products`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
SELECT * FROM (
SELECT * FROM doctrine_migration_versions ORDER BY execution_time ASC LIMIT 3
) r ORDER BY r.execution_time DESC;
//f1, f2 - все поля по которым ищем дубликаты
SELECT f1, f2, COUNT( f1) AS cnt
FROM table
GROUP BY f1, f2
HAVING (cnt > 1)
await interaction.deferReply();
// После вызова кода выше, дискорд даёт ещё 15 минут
// на то, чтобы отправить ответ.
// [Тут какой-то ваш код, который долго работает]
await interaction.reply('Информация о сервере: бла-блабла');
await interaction.reply('Ща, погодь, нужно в БД посмотреть...');
// После вызова кода выше, дискорд даёт ещё 15 минут
// на то, чтобы отправить follow up.
// [Тут какой-то ваш код, который долго работает]
await interaction.followUp('Вот, нашёл: Информация о сервере: бла-блабла');
// Код выше добавляет к ответу текст "Вот, нашёл: Информация о сервере: бла-блабла"
// (фраза «Ща, погодь» никуда не пропадает)
await interaction.reply('Подождите...');
// После вызова кода выше, дискорд даёт ещё 15 минут
// на то, чтобы отредактировать это сообщение
// [Тут какой-то ваш код, который долго работает]
await interaction.editReply('Информация о сервере: бла-блабла');
// Код выше заменяет "Подождите.." на "Информация о сервере: бла-блабла"
let talkedRecently = 0;
let talkedRecentlyDAYS = 0;
let talkedRecentlyHOURS = 0;
let talkedRecentlyMINUTES = 0;
let talkedRecentlySECUNDES = 0;
if(message.content.startsWith(prefix + "day")) {
if (talkedRecently > 0) {
message.channel.send(`Вы уже использовали эту команду. Повторите через ${Math.floor(talkedRecentlyDAYS)} дней / ${Math.floor(talkedRecentlyHOURS)} часов / ${Math.floor(talkedRecentlyMINUTES)} минут / ${talkedRecentlySECUNDES} секунд.`)
} else {
message.channel.send("Успешно!")
talkedRecently = 86400000;
talkedRecentlyDAYS = talkedRecently/86400000;
let time = setInterval(() => {
if (talkedRecently <= 0) { clearInterval(time); return; }
talkedRecentlySECUNDES -= 1;
if (talkedRecentlySECUNDES < 0) { talkedRecentlySECUNDES = 59; talkedRecentlyMINUTES -= 1; }
if (talkedRecentlyMINUTES < 0) { talkedRecentlyMINUTES = 59; talkedRecentlyHOURS -= 1; }
if (talkedRecentlyHOURS < 0) { talkedRecentlyHOURS = 23; talkedRecentlyDAYS -= 1; }
talkedRecently -= 1000;
}, 1000);
}
}
SELECT UserID, t1.CountMessage-t2.CountMessage
FROM daily_exp_snapshots t1
JOIN daily_exp_snapshots t2 USING (UserID)
WHERE t1.date_added >= CURRENT_DATE
AND t1.date_added < CURRENT_DATE + INTERVAL 1 DAY
AND t2.date_added >= CURRENT_DATE - INTERVAL 1 DAY
AND t2.date_added < CURRENT_DATE