Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 09.11.2023
Сообщений: 21

Не отправляются сообщения от бота твитч irc

04.07.2024, 18:00. Показов 287. Ответов 0
Метки c# (Все метки)

Студворк — интернет-сервис помощи студентам
У меня такая проблема я подключаю ботов к чату твитч предварительно вводив название канала в channelTextBox у меня боты подключаются по нажатию кнопки коннект (с этим всё хорошо всё работает). Но я хочу отправить сообщение от бота я выбираю бота (боты в виде кнопок) пишу сообщение в idcopytextbox нажимаю энтер для отправки но ничего не происходит. ПОМОГИТЕ!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private void Idtextbox_Copy_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        if (selectedBot == null)
        {
            ShowCustomMessageBox("Бот не выбран.");
            return;
        }
 
        string message = idtextbox_Copy.Text;
 
        try
        {
            selectedBot.SendMessage(message);
            ShowCustomMessageBox($"Сообщение отправлено ботом '{selectedBot.BotName}': {message}");
        }
        catch (Exception ex)
        {
            ShowCustomMessageBox($"Ошибка при отправке сообщения ботом '{selectedBot.BotName}': {ex.Message}");
        }
 
        idtextbox_Copy.Clear();
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
private void connectchat_Click(object sender, RoutedEventArgs e)
{
    if (botNames.Count == 0 || oauthTokens.Count == 0 || botNames.Count != oauthTokens.Count)
    {
        MessageBox.Show("Некорректные данные о ботах. Пожалуйста, загрузите файл с данными о ботах.");
        return;
    }
 
    for (int i = 0; i < botNames.Count; i++)
    {
        try
        {
            Bot bot = new Bot(channelNameTextBox.Text, botNames[i], oauthTokens[i]);
            bot.Connect(isLogging: true);
            CreateButtonForBot(botNames[i], oauthTokens[i], bot);
        }
        catch (Exception ex)
        {
            MessageBox.Show($"Ошибка при подключении бота '{botNames[i]}': {ex.Message}");
        }
    }
}
 
 
private void CreateButtonForBot(string botName, string oauthToken, Bot bot)
{
    Button botButton = new Button
    {
        Content = botName,
        Width = 120,
        Height = 40,
        Margin = new Thickness(8),
        Padding = new Thickness(5),
        FontSize = 12,
        Background = new SolidColorBrush(Color.FromRgb(30, 33, 61)),
        Foreground = new SolidColorBrush(Colors.White),
        BorderBrush = new SolidColorBrush(Colors.Black),
        BorderThickness = new Thickness(1),
    };
 
    botButton.Click += (s, ev) => { selectedBot = bot; };
    botButton.Click += (s, ev) => { botnamevivod.Text = botName + ":"; };
 
    botButton.MouseEnter += (s, e) =>
    {
        botButton.Background = new SolidColorBrush(Color.FromRgb(100, 149, 237));
    };
    botButton.MouseLeave += (s, e) =>
    {
        botButton.Background = new SolidColorBrush(Color.FromRgb(30, 33, 61));
    };
 
    // Определение стиля
    Style style = new Style { TargetType = typeof(Button) };
    style.Setters.Add(new Setter(Control.BackgroundProperty, new SolidColorBrush(Color.FromRgb(30, 33, 61))));
    style.Setters.Add(new Setter(Control.ForegroundProperty, Brushes.White));
    style.Setters.Add(new Setter(Control.BorderBrushProperty, Brushes.Black));
    style.Setters.Add(new Setter(Control.BorderThicknessProperty, new Thickness(1)));
    style.Setters.Add(new Setter(Control.FontSizeProperty, (double)12));
 
    ControlTemplate template = new ControlTemplate(typeof(Button));
    FrameworkElementFactory borderFactory = new FrameworkElementFactory(typeof(Border));
    borderFactory.SetValue(Border.CornerRadiusProperty, new CornerRadius(10));
    borderFactory.SetValue(Border.BorderBrushProperty, Brushes.Transparent);
    borderFactory.SetValue(Border.BorderThicknessProperty, new Thickness(1));
    borderFactory.SetValue(Border.BackgroundProperty, new TemplateBindingExtension(Control.BackgroundProperty));
 
    FrameworkElementFactory contentPresenterFactory = new FrameworkElementFactory(typeof(ContentPresenter));
    contentPresenterFactory.SetValue(ContentPresenter.ContentProperty, new TemplateBindingExtension(Button.ContentProperty));
    contentPresenterFactory.SetValue(ContentPresenter.HorizontalAlignmentProperty, HorizontalAlignment.Center);
    contentPresenterFactory.SetValue(ContentPresenter.VerticalAlignmentProperty, VerticalAlignment.Center);
    borderFactory.AppendChild(contentPresenterFactory);
 
    template.VisualTree = borderFactory;
    style.Setters.Add(new Setter(Button.TemplateProperty, template));
 
    Trigger trigger = new Trigger { Property = UIElement.IsMouseOverProperty, Value = true };
    trigger.Setters.Add(new Setter(Button.BackgroundProperty, new SolidColorBrush(Color.FromRgb(100, 149, 237))));
    style.Triggers.Add(trigger);
 
    botButton.Style = style;
 
    // Добавление кнопки в контейнер
    stackPanelBots.Children.Add(botButton);
}
 
private void LoadFileButton_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.Filter = "Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*";
    bool? result = openFileDialog.ShowDialog();
    if (result == true)
    {
        string filePath = openFileDialog.FileName;
        try
        {
            string[] lines = File.ReadAllLines(filePath);
            foreach (string line in lines)
            {
                string[] parts = line.Split(':');
                if (parts.Length >= 2)
                {
                    string botName = parts[0].Trim();
                    string oauthToken = parts[1].Trim();
 
                    botNames.Add(botName);
                    oauthTokens.Add(oauthToken);
                }
            }
        }
        catch (Exception exception)
        {
            MessageBox.Show("Ошибка при чтении файла: " + exception.Message);
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System;
using TwitchLib.Client;
using TwitchLib.Client.Events;
using TwitchLib.Client.Models;
 
namespace WpfAppGlebItog
{
    internal class Bot
    {
        public string BotName { get; private set; }
        private ConnectionCredentials creds;
        private TwitchClient client;
        private string ChannelName;
        private string BotToken;
 
        internal Bot(string channelName, string botName, string botToken)
        {
            ChannelName = channelName;
            BotName = botName;
            BotToken = botToken;
            creds = new ConnectionCredentials(BotName, BotToken);
            client = new TwitchClient();
        }
 
        internal void Connect(bool isLogging)
        {
            client.Initialize(creds, ChannelName);
            if (isLogging)
                client.OnLog += Client_OnLog;
            client.OnConnected += Client_OnConnected;
            client.Connect();
        }
 
        private void Client_OnLog(object sender, OnLogArgs e)
        {
            Console.WriteLine(e.Data);
        }
 
        private void Client_OnConnected(object sender, OnConnectedArgs e)
        {
            Console.WriteLine($"Connected to {e.AutoJoinChannel}");
        }
 
        internal void Disconnect()
        {
            client.Disconnect();
        }
 
        internal void SendMessage(string message)
        {
            if (client.IsConnected && !string.IsNullOrEmpty(ChannelName))
            {
                client.SendMessage(ChannelName, message);
            }
            else
            {
                throw new InvalidOperationException("Бот не подключен или имя канала пустое.");
            }
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
 
namespace WpfAppGlebItog
{
    internal class MessageSender
    {
        private List<string> botNames;
        private List<string> oauthTokens;
        private string channelName;
        private List<Bot> bots;
 
        public MessageSender(string channelName, List<string> botNames, List<string> oauthTokens)
        {
            this.channelName = channelName;
            this.botNames = botNames;
            this.oauthTokens = oauthTokens;
            this.bots = new List<Bot>();
 
            InitializeBots();
        }
 
        private void InitializeBots()
        {
            for (int i = 0; i < botNames.Count; i++)
            {
                try
                {
                    Bot bot = new Bot(channelName, botNames[i], oauthTokens[i]);
                    bot.Connect(isLogging: true);
                    bots.Add(bot);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Ошибка при подключении бота '{botNames[i]}': {ex.Message}");
                }
            }
        }
 
        public void SendMessage(string message, Bot selectedBot)
        {
            try
            {
                selectedBot.SendMessage(message);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка при отправке сообщения ботом '{selectedBot.BotName}': {ex.Message}");
            }
        }
    }    }
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<TextBox x:Name="idtextbox_Copy" KeyDown="Idtextbox_Copy_KeyDown" FocusVisualStyle="{x:Null}" GotFocus="TextBox_GotFocus" LostFocus="TextBox_LostFocus" MaxLength="25" IsReadOnly="False" IsEnabled="True" TextWrapping="NoWrap" Text="Введите сообщение" Background="#FF1E213D" Foreground="#FF6E6E6E" BorderBrush="#FF1E213D" Margin="330,320,-203,-311" 
    SelectionBrush="#FF1E213D" TextChanged="idtextbox_Copy_TextChanged">
    <TextBox.Style>
 
        <Style BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
            <Setter Property="BorderThickness" Value="2"/>
            <Setter Property="Padding" Value="1"/>
            <Setter Property="AllowDrop" Value="true"/>
            <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBox}">
                        <Border x:Name="bg" BorderBrush="#FF825E5E" BorderThickness="1">
                            <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                        <ControlTemplate.Triggers>
 
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="BorderBrush" TargetName="bg" Value="#FF191C33"/>
                                <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                            </Trigger>
 
                            <Trigger Property="IsFocused" Value="True">
                                <Setter Property="BorderBrush" TargetName="bg" Value="#FF191C33"/>
                                <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                            </Trigger>
 
 
                            <Trigger Property="IsFocused" Value="False">
                                <Setter Property="BorderBrush" TargetName="bg" Value="#FF191C33"/>
                                <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                            </Trigger>
 
                            <Trigger Property="IsMouseOver" Value="False">
                                <Setter Property="BorderBrush" TargetName="bg" Value="#FF191C33"/>
                                <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                            </Trigger>
 
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
 
    </TextBox.Style>
 
</TextBox>
<TextBox x:Name="channelNameTextBox"  FocusVisualStyle="{x:Null}" GotFocus="TextBox_GotFocus" LostFocus="TextBox_LostFocus" MaxLength="25" IsReadOnly="False" IsEnabled="True" TextWrapping="NoWrap" Text="id" Background="#FF191C33" Foreground="Gray" BorderBrush="#FF191C33" Margin="121,4,36,5" 
         SelectionBrush="#FF191C33">
    <TextBox.Style>
 
        <Style BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
            <Setter Property="BorderThickness" Value="2"/>
            <Setter Property="Padding" Value="1"/>
            <Setter Property="AllowDrop" Value="true"/>
            <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBox}">
                        <Border x:Name="bg" BorderBrush="#FF825E5E" BorderThickness="1">
                            <ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                        <ControlTemplate.Triggers>
 
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="BorderBrush" TargetName="bg" Value="#FF191C33"/>
                                <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                            </Trigger>
 
                            <Trigger Property="IsFocused" Value="True">
                                <Setter Property="BorderBrush" TargetName="bg" Value="#FF191C33"/>
                                <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                            </Trigger>
 
 
                            <Trigger Property="IsFocused" Value="False">
                                <Setter Property="BorderBrush" TargetName="bg" Value="#FF191C33"/>
                                <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                            </Trigger>
 
                            <Trigger Property="IsMouseOver" Value="False">
                                <Setter Property="BorderBrush" TargetName="bg" Value="#FF191C33"/>
                                <Setter Property="BorderThickness" TargetName="bg" Value="2"/>
                            </Trigger>
 
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
 
    </TextBox.Style>
 
</TextBox>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2024, 18:00
Ответы с готовыми решениями:

Регулярное выражение под IRC сообщения
Пишу регулярку для проверки корректности IRC-сообщений. Вообщем нашел сайт,где предлагается написать эту регулярку, там есть примеры,по...

Не отправляются сообщения
Добрый вечер, у меня планшет Ampe A10, были установлены приложения вконтакте и одноклассники, все работало нормально, но потом у меня стала...

Не отправляются сообщения на почту
Добрый день, форумчане. Столкнулся сегодня с такой проблемой: На одном хостинге использую форму обратной связи, сообщения без проблем...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.07.2024, 18:00
Помогаю со студенческими работами здесь

Не отправляются сообщения на блоге
Извените если не в тот раздел, Админы переместите пожалуйста тему в нужный! Когда кто то пытается отправить комментарий на моем блоге,...

Не отправляются сообщения в чат
На игровом сайте по покеру есть чат. Я пишу в строке сообщение на английском, жму Ентер и оно исчезает. Другие все нормально отсылают и...

Не отправляются сообщения серверу
Пытаюсь написать чат на сокетах и вот такая непонятность имеет место. При подключении клиента серверу отправляется условное приветствие ...

Не отправляются сообщения из Ajax-формы
Привет всем! Сделал ajax форму для отправки сообщений по уроку http://www.calabonga.com/Blog/ViewPost.aspx?id=85, но она ничего и никуда...

Не отправляются сообщения на E-mail с формы на сайте
Здравствуйте! Скачал в интернете шаблон одностраничника (если поможет, вот название и ссылка: Meilleur HTML5 website template)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru