msg.value exclusively relate to ether, so you can't get those to somehow show you token amounts.
But to accept tokens, the caller needs to first call
approve(<address>, <amount>) on the token, where
<address> is the address of your contract, and
<amount> is the number of tokens. Then when they call a function on your contract, you can call
token.transferFrom(msg.sender, address(this), amount) to transfer the tokens to the contract. You can check the contract's token balance with
token.balanceOf(address(this)). In those calls,
token is the contract for the token you want to use.