This commit is contained in:
aozhiwei 2021-01-28 15:39:23 +08:00
parent 8f79147f93
commit a7001bb2c9
5 changed files with 59 additions and 0 deletions

View File

@ -552,6 +552,15 @@ void GuildMgr::__GuildDirtyWordCheck(f8::JsonHttpRequest* request)
} }
} }
void GuildMgr::__GuildDirtyWordReplace(f8::JsonHttpRequest* request)
{
std::string text = request->request.At("text")->AsXValue();
std::string new_text = MetaMgr::Instance()->ReplaceDirtyWord(text, '*');
request->resp_xobj->SetVal("errcode", 0);
request->resp_xobj->SetVal("errmsg", "");
request->resp_xobj->SetVal("new_text", new_text);
}
void GuildMgr::__GenTestData(f8::JsonHttpRequest* request) void GuildMgr::__GenTestData(f8::JsonHttpRequest* request)
{ {
} }

View File

@ -26,6 +26,7 @@ class GuildMgr : public a8::Singleton<GuildMgr>
void __GuildRank(f8::JsonHttpRequest* request); void __GuildRank(f8::JsonHttpRequest* request);
void __GuildConfirmed(f8::JsonHttpRequest* request); void __GuildConfirmed(f8::JsonHttpRequest* request);
void __GuildDirtyWordCheck(f8::JsonHttpRequest* request); void __GuildDirtyWordCheck(f8::JsonHttpRequest* request);
void __GuildDirtyWordReplace(f8::JsonHttpRequest* request);
void __GenTestData(f8::JsonHttpRequest* request); void __GenTestData(f8::JsonHttpRequest* request);
private: private:

View File

@ -65,6 +65,11 @@ void HandlerMgr::Init()
{ {
GuildMgr::Instance()->__GuildDirtyWordCheck(request); GuildMgr::Instance()->__GuildDirtyWordCheck(request);
}); });
RegisterGMMsgHandler("Guild@dirtyWordReplace",
[] (f8::JsonHttpRequest* request)
{
GuildMgr::Instance()->__GuildDirtyWordReplace(request);
});
RegisterGMMsgHandler("Guild@genTestData", RegisterGMMsgHandler("Guild@genTestData",
[] (f8::JsonHttpRequest* request) [] (f8::JsonHttpRequest* request)
{ {

View File

@ -17,6 +17,18 @@
#define METAMGR_READ_STR(field_name, def_val) MetaMgr::Instance()->field_name = \ #define METAMGR_READ_STR(field_name, def_val) MetaMgr::Instance()->field_name = \
a8::XValue(MetaMgr::Instance()->GetSysParamAsString(#field_name, def_val)).GetString(); a8::XValue(MetaMgr::Instance()->GetSysParamAsString(#field_name, def_val)).GetString();
static bool PureEnglishName(const std::string& role_name)
{
for (size_t i = 0; i < role_name.size(); i++) {
if (role_name[i] >= 0 && role_name[i] <= 127) {
continue;
} else {
return false;
}
}
return true;
}
class MetaDataLoader class MetaDataLoader
{ {
public: public:
@ -130,6 +142,37 @@ bool MetaMgr::HasDirtyWord(const std::string& text)
return false; return false;
} }
std::string MetaMgr::ReplaceDirtyWord(const std::string& text, char c)
{
std::string result;
result.reserve(text.size());
for (size_t i = 0; i < text.size(); i++) {
bool found = false;
for (auto itr = loader_->dirty_words.begin(); itr != loader_->dirty_words.end(); ++itr) {
if (itr->first <= text.size() - i) {
std::string substr = text.substr(i, itr->first);
// 如果是纯英文,则先转为小写,根据策划说明,屏蔽字大小写不敏感
if (PureEnglishName(substr)) {
transform(substr.begin(), substr.end(), substr.begin(), ::tolower);
}
if (substr.size() > 0 && itr->second.find(substr) != itr->second.end()) {
int str_len = a8::GetUtf8Length(substr.c_str());
for (int j = 0; j < str_len; j++) {
result.push_back(c);
}
i += substr.size() - 1;
found = true;
break;
}
}
}//endfor map
if (!found) {
result.push_back(text[i]);
}
}
return result;
}
std::string MetaMgr::GetText(const std::string& textid, const std::string& def_text) std::string MetaMgr::GetText(const std::string& textid, const std::string& def_text)
{ {
auto itr = loader_->text_hash.find(textid); auto itr = loader_->text_hash.find(textid);

View File

@ -19,6 +19,7 @@ class MetaMgr : public a8::Singleton<MetaMgr>
void Reload(); void Reload();
bool HasDirtyWord(const std::string& text); bool HasDirtyWord(const std::string& text);
std::string ReplaceDirtyWord(const std::string& text, char c);
std::string GetText(const std::string& textid, const std::string& def_text=""); std::string GetText(const std::string& textid, const std::string& def_text="");
private: private: