RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-230855

Aleksey Brekhin's questions

Martin Hope
Aleksey Brekhin
Asked: 2020-10-08 11:52:51 +0000 UTC

使用异步的问题,等待

  • -1

你好论坛用户))我有一个问题:我写了一个电报机器人,它从照片中提取某些信息并将其输入数据库。进一步的代码,在 - 解释之后。

 private static async void BotOnPhotoReceived(object sender, MessageEventArgs messageEventArgs)
    {
        var message = messageEventArgs.Message;
        try
        {
            if (message == null || message.Type != MessageType.PhotoMessage)
                return;


            var fileId = message.Photo[message.Photo.Length - 1].FileId;

            var file = await Bot.GetFileAsync(fileId);

            var stream = file.FileStream;

            using (Stream output = new FileStream($"../../Photo/img{message.Chat.Id}{fileId}.jpg", FileMode.Append))
            {
                byte[] buffer = new byte[32 * 1024];
                int read;

                while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    output.Write(buffer, 0, read);
                }
            }

            await Bot.SendChatActionAsync(message.Chat.Id, ChatAction.Typing);

            var FileUrl = @"D:\\128.png";
            using (var streamm = System.IO.File.Open(FileUrl, FileMode.Open))
            {
                FileToSend fts = new FileToSend();
                fts.Content = streamm;
                fts.Filename = FileUrl.Split('\\').Last();
                var test = await Bot.SendStickerAsync(message.Chat.Id, fts);
            }

            string imagePath = $"../../Photo/img{message.Chat.Id}{fileId}.jpg";

            TextDetection newTD = new TextDetection();

            string text = newTD.photo2string(imagePath);

            string result = ParseString(text);
            Console.WriteLine(Convert.ToDouble(result));
            double result1 = Math.Abs(Convert.ToDouble(result));

            DataBaseCon.InsertUser((int)message.Chat.Id, message.Chat.FirstName);
            DataBaseCon.InsertAmount((int)message.Chat.Id, result1);

            var keyboard = new Telegram.Bot.Types.ReplyMarkups.InlineKeyboardMarkup();
            keyboard.InlineKeyboard = new Telegram.Bot.Types.InlineKeyboardButtons.InlineKeyboardButton[][]
            {
                new Telegram.Bot.Types.InlineKeyboardButtons.InlineKeyboardButton[]
                {
                    new KeyboardButton("Продукты питания"),
                    new KeyboardButton("Техника"),
                },
                new Telegram.Bot.Types.InlineKeyboardButtons.InlineKeyboardButton[]
                {
                    new KeyboardButton("Транспорт"),
                    new KeyboardButton("Мобильная связь")
                },
                new Telegram.Bot.Types.InlineKeyboardButtons.InlineKeyboardButton[]
                {
                    new KeyboardButton("Другое")
                },
            };

            await Bot.SendTextMessageAsync(message.Chat.Id, "Выберите категорию товара, который вы приобрели", replyMarkup: keyboard);


            await Task.Delay(1000);

            bool flag = true;

            Bot.OnCallbackQuery += (object sc, CallbackQueryEventArgs ev) =>
            {
                Task.Delay(5000);
                if (ev.CallbackQuery.Data == "Транспорт" && flag)
                {
                    DataBaseCon.InsertCategory((int)message.Chat.Id, "Транспорт");
                    Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Расходы на транспорт зафиксированы");
                    Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id);
                }
                else
                if (ev.CallbackQuery.Data == "Мобильная связь" && flag)
                {
                    DataBaseCon.InsertCategory((int)message.Chat.Id, "Мобильная связь");
                    Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Расходы на мобильную связь зафиксированы");
                    Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id);
                }
                else
                if (ev.CallbackQuery.Data == "Продукты питания" && flag)
                {
                    DataBaseCon.InsertCategory((int)message.Chat.Id, "Продукты питания");
                    Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Расходы на продукты питания зафиксированы");
                    Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id);

                }
                else
                if (ev.CallbackQuery.Data == "Техника" && flag)
                {
                    DataBaseCon.InsertCategory((int)message.Chat.Id, "Техника");
                    Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Расходы на технику зафиксированы");
                    Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id);
                }
                else
                if (ev.CallbackQuery.Data == "Другое" && flag)
                {
                    DataBaseCon.InsertCategory((int)message.Chat.Id, "Другое");
                    Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id, "Расходы на другую категорию зафиксированы");
                    Bot.AnswerCallbackQueryAsync(ev.CallbackQuery.Id);
                }
                flag = !flag;
            };

            if (flag)
            {  
                await Bot.SendTextMessageAsync(message.Chat.Id, WalletKeeper.Constants.IT_IS_DONE);
            }

        }
        catch (Exception e){
            await Bot.SendTextMessageAsync(message.Chat.Id, WalletKeeper.Constants.FAILED);            
        }
    }

如您所见,我在这里使用了按钮,但它们(或者更确切地说,它们的处理)存在问题。我上传了一张照片,然后我选择了将数据添加到(在数据库中)“交通”、“移动通信”等的类别,我遇到了以下问题:假设我第一次上传照片并选择了一个类别- 一切都很好,第二次 - 信息也输入正确,第三次我两次将一些数据输入数据库,我已经打破了我的整个脑袋(还有调试器),但是这个bug一直没有成立。据推测,问题是由于不正确使用async 和 await造成的。以防万一,我会发布更多代码。

        static void Main(string[] args)
    {
        Bot.OnMessage += BotOnMessageReceived;
        Bot.OnMessage += BotOnPhotoReceived;

        var me = Bot.GetMeAsync().Result;
        Console.Title = me.Username;

        Bot.StartReceiving();
        Console.ReadLine();
        Bot.StopReceiving();
    }

提前致谢))

c#
  • 1 个回答
  • 10 Views
Martin Hope
Aleksey Brekhin
Asked: 2020-03-18 23:10:07 +0000 UTC

定义您自己的函数并将其传递给标准应用函数

  • 0

任务如下:根据函数传递的值,使用 apply 添加列表元素或乘以列表元素。那些。

apply func(x) '(1 2 3 4)

如果 x = 1,则结果为 10,如果 x = 2,则结果为 24

这是我所做的:

定义函数 func

(defun func_(x) (cond ((eql 1 x)(plus))(eql 2 x)(TIMES))

然后我试着打电话申请

(apply func_(1) '(1 2 3 4))

但是编译器抛出一个错误

错误:变量 FUNC_ 未绑定。
快速链接打开:执行 (si::use-fast-links nil) 用于调试
EVAL 发出的错误信号。
回溯:EVAL
在 SYSTEM::GCL-TOP-LEVEL 中断。

lisp
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5