| 835 | try { |
| 836 | if (db && typeof db.close === "function") { |
| 837 | db.close(); |
| 838 | db = null as any; |
| 839 | } |
| 840 | } catch (error) { |
| 841 | console.error("Failed to close keyword DB:", error); |
| 842 | db = null as any; |
| 843 | } |
| 844 | } |
| 845 | |
| 846 | description: string = `关键词回复管理`; |
| 847 | cmdHandlers: Record<string, (msg: Api.Message) => Promise<void>> = { |
| 848 | keyword, |
| 849 | }; |
| 850 | listenMessageHandler?: ((msg: Api.Message) => Promise<void>) | undefined = |
| 851 | async (message) => { |
| 852 | try { |
| 853 | const text = |
| 854 | message.message || |
| 855 | (message.media && "caption" in message.media |
| 856 | ? String(message.media.caption || "") |
| 857 | : ""); |
| 858 | if (!text) { |
| 859 | return; |
| 860 | } |
| 861 | |
| 862 | if (message.out) { |
| 863 | return; |
| 864 | } |
| 865 | |
| 866 | await keywordTasks.checkAndReply(message); |
| 867 | } catch (error) { |
| 868 | console.error("Process keyword message error:", error); |
| 869 | } |
| 870 | }; |
| 871 | } |
| 872 | |
| 873 | export default new KeywordPlugin(); |
| 874 | |
| 875 | export async function processKeywordMessage( |
| 876 | message: Api.Message |
| 877 | ): Promise<void> { |
| 878 | try { |
| 879 | const text = |
| 880 | message.message || |
| 881 | (message.media && "caption" in message.media |
| 882 | ? String(message.media.caption || "") |
nothing calls this directly
no test coverage detected