我正在嘗試為 Twitch 創建我的第一個聊天機器人,但我遇到了 Twitch 使用的表情的一些問題。
我需要能夠從字串中洗掉幾個表情(Twitch 上的表情只是單詞)。
我不知道這個詞是什么,但我知道這個詞在字串中的位置,起始索引和長度。
例如,訊息:Hello HeyGuys how are you? WutFace WutFace在 Twitch 上產生以下內容:

使用tmi.js我可以獲取此訊息,包括訊息中的表情并將它們發送到我的 C# 程式。
我在 C# 中從 tmi.js 收到的訊息如下所示:
{'28087':['27-33','35-41'],'30259':['6-12']}
其中“28087”和“30259”是表情的 ID,27-33、35-41 和 6-12 是表情在訊息本身中的位置。
如何使用每個單詞/表情的預定義開始和停止位置從我的字串中洗掉所有這些單詞/表情?
我的一次不成功的嘗試:
dynamic json = JsonConvert.DeserializeObject(emotes); // { '28087': [ '27-33', '35-41' ], '30259': [ '6-12' ] }
int prevLength = 0;
foreach (var a in json)
{
foreach (var b in a)
{
for (int i = 0; i < b.Count; i )
{
string range = b[i];
int start = Convert.ToInt32(range.Split('-')[0]);
int end = Convert.ToInt32(range.Split('-')[1]);
int length = end - start;
length = length 1;
if (prevLength != 0)
{
start = start - prevLength;
}
prevLength = prevLength length;
message = message.Remove(start, length);
}
}
}
上面的代碼可以從字串中洗掉多個表情/單詞,只要表情/單詞相同即可。混合表情/單詞不起作用。
uj5u.com熱心網友回復:
首先,我鼓勵你擺脫它dynamic。不僅因為你完全失去了型別安全,還因為它讓你更難理解你在做什么。你可以有一個更好的結構:
var ranges = JsonConvert
.DeserializeObject<Dictionary<string, string[]>>(emotes)
// Get the strings in each list, the Key doesn't matter here
.SelectMany(x => x.Value)
// And transform the strings into objects like { int Start; int End; }
.Select(x =>
{
var splitted = x.Split('-');
return new
{
Start = int.Parse(splitted[0]),
End = int.Parse(splitted[1])
};
});
現在,您不需要 3 個回圈,您不需要擔心拆分、決議或其他任何事情。您只需要從字串中洗掉這些索引:
foreach (var range in ranges)
{
// TODO: remove range from message using range.Start and range.End
}
已經簡單多了!現在,至于實際洗掉表情,您需要在洗掉后仔細考慮其余表情的索引。
您可以使用每個隨機表情并message在每次洗掉后處理開始和結束索引,但這很容易出錯,而且總體上太復雜了。
有一種更簡單的方法可以做到這一點,它是從最后一個表情開始,一直到第一個,實作這一點只是:
var ranges = JsonConvert
// ... existing code
.OrderByDescending(x => x.End);
因此,現在您擁有按結束位置排序的所有范圍,讓您可以輕松擺脫它們:
foreach (var range in ranges)
{
message = message.Remove(range.Start, range.End - range.Start 1);
}
看看這個在行動:https : //dotnetfiddle.net/QkktG3
Hello HeyGuys how are you? WutFace WutFace
Hello HeyGuys how are you? WutFace
Hello HeyGuys how are you?
Hello how are you?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/335852.html
標籤:C#
