Message sending
This commit is contained in:
parent
00c0090c19
commit
6e6c6f5c48
@ -225,6 +225,14 @@ class Client:
|
|||||||
sync_from=sync_from.serialize() if sync_from else None
|
sync_from=sync_from.serialize() if sync_from else None
|
||||||
))[-limit if limit else 0:]
|
))[-limit if limit else 0:]
|
||||||
|
|
||||||
|
async def send_message(self, channel_id: Long, text: str) -> Chatlog:
|
||||||
|
return await self._api_user_request_result(
|
||||||
|
Chatlog,
|
||||||
|
"send_message",
|
||||||
|
channel_id=channel_id.serialize(),
|
||||||
|
text=text
|
||||||
|
)
|
||||||
|
|
||||||
async def stop(self) -> None:
|
async def stop(self) -> None:
|
||||||
# TODO Stop all event handlers
|
# TODO Stop all event handlers
|
||||||
await self._api_user_request_void("stop")
|
await self._api_user_request_void("stop")
|
||||||
|
@ -19,6 +19,7 @@ from typing import TYPE_CHECKING, Any, AsyncGenerator, Pattern, cast
|
|||||||
from collections import deque
|
from collections import deque
|
||||||
import asyncio
|
import asyncio
|
||||||
import re
|
import re
|
||||||
|
import time
|
||||||
|
|
||||||
from mautrix.appservice import IntentAPI
|
from mautrix.appservice import IntentAPI
|
||||||
from mautrix.bridge import BasePortal, NotificationDisabler, async_getter_lock
|
from mautrix.bridge import BasePortal, NotificationDisabler, async_getter_lock
|
||||||
@ -45,7 +46,7 @@ from .db import (
|
|||||||
Message as DBMessage,
|
Message as DBMessage,
|
||||||
Portal as DBPortal,
|
Portal as DBPortal,
|
||||||
)
|
)
|
||||||
from .formatter.from_kakaotalk import kakaotalk_to_matrix
|
from .formatter import kakaotalk_to_matrix, matrix_to_kakaotalk
|
||||||
|
|
||||||
from .kt.types.bson import Long, IntLong
|
from .kt.types.bson import Long, IntLong
|
||||||
from .kt.types.channel.channel_info import ChannelInfo
|
from .kt.types.channel.channel_info import ChannelInfo
|
||||||
@ -53,6 +54,7 @@ from .kt.types.channel.channel_type import KnownChannelType, ChannelType
|
|||||||
from .kt.types.chat.chat import Chatlog
|
from .kt.types.chat.chat import Chatlog
|
||||||
|
|
||||||
from .kt.client.types import UserInfoUnion, PortalChannelInfo
|
from .kt.client.types import UserInfoUnion, PortalChannelInfo
|
||||||
|
from .kt.client.errors import CommandException
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .__main__ import KakaoTalkBridge
|
from .__main__ import KakaoTalkBridge
|
||||||
@ -649,10 +651,44 @@ class Portal(DBPortal, BasePortal):
|
|||||||
else:
|
else:
|
||||||
raise NotImplementedError(f"Unsupported message type {message.msgtype}")
|
raise NotImplementedError(f"Unsupported message type {message.msgtype}")
|
||||||
|
|
||||||
|
async def _make_dbm(self, sender: u.User, event_id: EventID, ktid: Long) -> None:
|
||||||
|
await DBMessage(
|
||||||
|
mxid=event_id,
|
||||||
|
mx_room=self.mxid,
|
||||||
|
ktid=ktid,
|
||||||
|
index=0,
|
||||||
|
kt_chat=self.ktid,
|
||||||
|
kt_receiver=self.kt_receiver,
|
||||||
|
# TODO?
|
||||||
|
#kt_sender=sender.ktid,
|
||||||
|
timestamp=int(time.time() * 1000),
|
||||||
|
).insert()
|
||||||
|
|
||||||
async def _handle_matrix_text(
|
async def _handle_matrix_text(
|
||||||
self, event_id: EventID, sender: u.User, message: TextMessageEventContent
|
self, event_id: EventID, sender: u.User, message: TextMessageEventContent
|
||||||
) -> None:
|
) -> None:
|
||||||
self.log.info("TODO: _handle_matrix_text")
|
converted = await matrix_to_kakaotalk(message, self.mxid, self.log)
|
||||||
|
try:
|
||||||
|
chatlog = await sender.client.send_message(
|
||||||
|
self.ktid,
|
||||||
|
text=converted.text,
|
||||||
|
# TODO
|
||||||
|
#mentions=converted.mentions,
|
||||||
|
#reply_to=converted.reply_to,
|
||||||
|
)
|
||||||
|
except CommandException:
|
||||||
|
self.log.debug(f"Error handling Matrix message {event_id}")
|
||||||
|
raise
|
||||||
|
|
||||||
|
await self._make_dbm(sender, event_id, chatlog.logId)
|
||||||
|
self.log.debug(f"Handled Matrix message {event_id} -> {chatlog.logId}")
|
||||||
|
sender.send_remote_checkpoint(
|
||||||
|
MessageSendCheckpointStatus.SUCCESS,
|
||||||
|
event_id,
|
||||||
|
self.mxid,
|
||||||
|
EventType.ROOM_MESSAGE,
|
||||||
|
message.msgtype,
|
||||||
|
)
|
||||||
|
|
||||||
async def _handle_matrix_media(
|
async def _handle_matrix_media(
|
||||||
self, event_id: EventID, sender: u.User, message: MediaMessageEventContent, is_relay: bool
|
self, event_id: EventID, sender: u.User, message: MediaMessageEventContent, is_relay: bool
|
||||||
|
@ -23,6 +23,8 @@ import {
|
|||||||
KnownAuthStatusCode,
|
KnownAuthStatusCode,
|
||||||
util,
|
util,
|
||||||
} from "node-kakao"
|
} from "node-kakao"
|
||||||
|
import chat from "node-kakao/chat"
|
||||||
|
const { KnownChatType } = chat
|
||||||
/** @typedef {import("node-kakao").OAuthCredential} OAuthCredential */
|
/** @typedef {import("node-kakao").OAuthCredential} OAuthCredential */
|
||||||
/** @typedef {import("./clientmanager.js").default} ClientManager} */
|
/** @typedef {import("./clientmanager.js").default} ClientManager} */
|
||||||
|
|
||||||
@ -341,6 +343,22 @@ export default class PeerClient {
|
|||||||
return await talkChannel.getChatListFrom(req.sync_from)
|
return await talkChannel.getChatListFrom(req.sync_from)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {Object} req
|
||||||
|
* @param {string} req.mxid
|
||||||
|
* @param {Long} req.channel_id
|
||||||
|
* @param {string} req.text
|
||||||
|
*/
|
||||||
|
sendMessage = async (req) => {
|
||||||
|
const userClient = this.#getUser(req.mxid)
|
||||||
|
const talkChannel = userClient.talkClient.channelList.get(req.channel_id)
|
||||||
|
|
||||||
|
return await talkChannel.sendChat({
|
||||||
|
type: KnownChatType.TEXT,
|
||||||
|
text: req.text,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Object} req
|
* @param {Object} req
|
||||||
* @param {string} req.mxid
|
* @param {string} req.mxid
|
||||||
@ -434,19 +452,7 @@ export default class PeerClient {
|
|||||||
get_portal_channel_info: this.getPortalChannelInfo,
|
get_portal_channel_info: this.getPortalChannelInfo,
|
||||||
get_chats: this.getChats,
|
get_chats: this.getChats,
|
||||||
get_profile: this.getProfile,
|
get_profile: this.getProfile,
|
||||||
/*
|
send_message: this.sendMessage,
|
||||||
send: req => this.puppet.sendMessage(req.chat_id, req.text),
|
|
||||||
send_file: req => this.puppet.sendFile(req.chat_id, req.file_path),
|
|
||||||
set_last_message_ids: req => this.puppet.setLastMessageIDs(req.msg_ids, req.own_msg_ids, req.rct_ids),
|
|
||||||
forget_chat: req => this.puppet.forgetChat(req.chat_id),
|
|
||||||
pause: () => this.puppet.stopObserving(),
|
|
||||||
resume: () => this.puppet.startObserving(),
|
|
||||||
get_contacts: () => this.puppet.getContacts(),
|
|
||||||
get_chats: () => this.puppet.getRecentChats(),
|
|
||||||
get_chat: req => this.puppet.getChatInfo(req.chat_id, req.force_view),
|
|
||||||
get_messages: req => this.puppet.getMessages(req.chat_id),
|
|
||||||
read_image: req => this.puppet.readImage(req.image_url),
|
|
||||||
*/
|
|
||||||
//is_connected: async () => ({ is_connected: !await this.puppet.isDisconnected() }),
|
//is_connected: async () => ({ is_connected: !await this.puppet.isDisconnected() }),
|
||||||
}[req.command] || this.handleUnknownCommand
|
}[req.command] || this.handleUnknownCommand
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user