主要问题是我如何获得与机器人进行的所有对话的聊天ID?
想象一下,在机器人执行期间,与用户A进行了对话.
现在我停止机器人进程并再次启动它.
如何获取与用户A过去聊天的聊天ID?
我知道当用户向您发送消息时您会收到聊天ID,并且您使用该ID进行回复,但是如果用户A在当前执行期间不再向僵尸程序发送消息,该怎么办?如何获得过去的会话ID?
是唯一一个存储id并在第二次执行开始时检索它们的选项吗?
更新:
看起来当前的解决方案是将聊天ID存储在安全的地方,正如@Tick Tock所回答的那样.
我用 php 编写了一个电报机器人。我想给所有会员发短信,我保存了所有会员的chat_id。我尝试使用此功能发送消息:
function sendMessage($chatId, $message) {
$url = WEBSITE . "/sendMessage?chat_id=" . $chatId . "&text=" . urlencode($message);
file_get_contents($url);
}
Run Code Online (Sandbox Code Playgroud)
并使用此函数获取用户 chatid 并发送消息:
public function sendall($message) {
$sql = $this->con->prepare('SELECT * FROM `users`');
$sql->execute();
$res = $sql->fetchAll();
foreach ($res as $row) {
sendMessage($row['chatid'], $message);
}
exit();
}
Run Code Online (Sandbox Code Playgroud)
但这无法正常工作,该消息会多次发送给会员,并且直到我清除数据库后才会停止。
我正在尝试生成一个输出dacpac文件,然后我可以将其部署到不同的环境中.到目前为止,我使用目标发布直接从msbuild进行部署,例如:
msbuild dbproject.sqlproj /t:Build;Publish /p:SqlPublishProfilePath=test.publish.xml /p:UpdateDatabase=True /p:PublishScriptFileName=test.sql
Run Code Online (Sandbox Code Playgroud)
生成的输出脚本的大小(仅供参考,因为UpdateDatabase设置为true)为2.5MB.
我的新方法是只构建项目,存储dacpac然后使用sqlpackage进行部署,并执行"发布"操作.这个新方法报告了msbuild SqlPublishTask未报告的一些警告.
作为参考,我运行了下一个命令:
sqlpackage.exe /action:script /outputpath:test.sql /sourcefile:dbproject.dacpac /pr:test.publish.xml
Run Code Online (Sandbox Code Playgroud)
并且输出脚本的大小现在是4.9MB.
报告的具体警告不在此关注,关注的是脚本不同,我的问题是有什么区别的?
更重要的是哪一个是最好/最安全的部署方法?
我知道理论,它们很棒,框架中包含的那些简化了很多事情,甚至具有性能提升。
关于这个主题的答案很多,有很好的例子,但对我或框架中已经存在的例子通常没有什么实际价值。
问题是,在哪种情况下您决定编写自己的使用泛型的类?