ImController.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controllers\Admin\Setting;
  4. use App\Controllers\BaseController;
  5. use App\Models\Setting;
  6. use App\Services\IM\Discord;
  7. use App\Services\IM\Slack;
  8. use App\Services\IM\Telegram;
  9. use Exception;
  10. use GuzzleHttp\Exception\GuzzleException;
  11. use Telegram\Bot\Exceptions\TelegramSDKException;
  12. use function json_encode;
  13. final class ImController extends BaseController
  14. {
  15. public static array $update_field = [
  16. 'enable_telegram',
  17. 'telegram_token',
  18. 'telegram_chatid',
  19. 'telegram_bot',
  20. 'telegram_request_token',
  21. 'telegram_add_node',
  22. 'telegram_add_node_text',
  23. 'telegram_update_node',
  24. 'telegram_update_node_text',
  25. 'telegram_delete_node',
  26. 'telegram_delete_node_text',
  27. 'telegram_node_gfwed',
  28. 'telegram_node_gfwed_text',
  29. 'telegram_node_ungfwed',
  30. 'telegram_node_ungfwed_text',
  31. 'telegram_node_offline',
  32. 'telegram_node_offline_text',
  33. 'telegram_node_online',
  34. 'telegram_node_online_text',
  35. 'telegram_daily_job',
  36. 'telegram_daily_job_text',
  37. 'telegram_diary',
  38. 'telegram_diary_text',
  39. 'telegram_unbind_kick_member',
  40. 'telegram_group_bound_user',
  41. 'enable_welcome_message',
  42. 'telegram_group_quiet',
  43. 'allow_to_join_new_groups',
  44. 'group_id_allowed_to_join',
  45. 'help_any_command',
  46. 'user_not_bind_reply',
  47. 'discord_bot_token',
  48. 'discord_client_id',
  49. 'discord_client_secret',
  50. 'discord_guild_id',
  51. 'slack_token',
  52. 'slack_client_id',
  53. 'slack_client_secret',
  54. 'slack_team_id',
  55. ];
  56. /**
  57. * @throws Exception
  58. */
  59. public function im($request, $response, $args)
  60. {
  61. $settings = [];
  62. $settings_raw = Setting::get(['item', 'value', 'type']);
  63. foreach ($settings_raw as $setting) {
  64. if ($setting->type === 'bool') {
  65. $settings[$setting->item] = (bool) $setting->value;
  66. } else {
  67. $settings[$setting->item] = (string) $setting->value;
  68. }
  69. }
  70. return $response->write(
  71. $this->view()
  72. ->assign('update_field', self::$update_field)
  73. ->assign('settings', $settings)
  74. ->fetch('admin/setting/im.tpl')
  75. );
  76. }
  77. public function saveIm($request, $response, $args)
  78. {
  79. $list = self::$update_field;
  80. foreach ($list as $item) {
  81. $setting = Setting::where('item', '=', $item)->first();
  82. if ($setting->type === 'array') {
  83. $setting->value = json_encode($request->getParam($item));
  84. } else {
  85. $setting->value = $request->getParam($item);
  86. }
  87. if (! $setting->save()) {
  88. return $response->withJson([
  89. 'ret' => 0,
  90. 'msg' => "保存 {$item} 时出错",
  91. ]);
  92. }
  93. }
  94. return $response->withJson([
  95. 'ret' => 1,
  96. 'msg' => '保存成功',
  97. ]);
  98. }
  99. public function testTelegram($request, $response, $args)
  100. {
  101. try {
  102. (new Telegram())->send(
  103. $request->getParam('telegram_user_id'),
  104. '这是一条测试消息',
  105. );
  106. } catch (TelegramSDKException|Exception $e) {
  107. return $response->withJson([
  108. 'ret' => 0,
  109. 'msg' => '测试信息发送失败 ' . $e->getMessage(),
  110. ]);
  111. }
  112. return $response->withJson([
  113. 'ret' => 1,
  114. 'msg' => '测试信息发送成功',
  115. ]);
  116. }
  117. public function testDiscord($request, $response, $args)
  118. {
  119. try {
  120. (new Discord())->send(
  121. $request->getParam('discord_user_id'),
  122. '这是一条测试消息',
  123. );
  124. } catch (GuzzleException|Exception $e) {
  125. return $response->withJson([
  126. 'ret' => 0,
  127. 'msg' => '测试信息发送失败 ' . $e->getMessage(),
  128. ]);
  129. }
  130. return $response->withJson([
  131. 'ret' => 1,
  132. 'msg' => '测试信息发送成功',
  133. ]);
  134. }
  135. public function testSlack($request, $response, $args)
  136. {
  137. try {
  138. (new Slack())->send(
  139. $request->getParam('slack_user_id'),
  140. '这是一条测试消息',
  141. );
  142. } catch (GuzzleException|Exception $e) {
  143. return $response->withJson([
  144. 'ret' => 0,
  145. 'msg' => '测试信息发送失败 ' . $e->getMessage(),
  146. ]);
  147. }
  148. return $response->withJson([
  149. 'ret' => 1,
  150. 'msg' => '测试信息发送成功',
  151. ]);
  152. }
  153. }